// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
// RUN: c_compiler -c -o %t1.o -I "common" "common/testsuite.c"
// RUN: c_compiler -c %s -I "common" -o %t2.o
// RUN: linker -o %t1%exeext  %t1.o %t2.o
// RUN: runtool %t1%exeext | checker "TEST PASSED"
// RUN: cxx_compiler cxx_rtti -c %s -I "common" -o %t2.o
// RUN: linker -o %t2%exeext  %t1.o %t2.o
// RUN: runtool %t2%exeext | checker "TEST PASSED"
#include "testsuite.h"

struct  BFu9ll_D_BFu8ll  {
  __tsu64 v1:9;
  double v2;
  __tsu64 v3:8;
};
//SIG(1 BFu9ll_D_BFu8ll) C1{ FL:9 FL FL:8}



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


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



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


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



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


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



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


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



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


struct  BFu9ll_D_C  {
  __tsu64 v1:9;
  double v2;
  char v3;
};
//SIG(1 BFu9ll_D_C) C1{ FL:9 FL Fc}



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


struct  BFu9ll_D_D  {
  __tsu64 v1:9;
  double v2;
  double v3;
};
//SIG(1 BFu9ll_D_D) C1{ FL:9 FL[2]}



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


struct  BFu9ll_D_F  {
  __tsu64 v1:9;
  double v2;
  float v3;
};
//SIG(1 BFu9ll_D_F) C1{ FL:9 FL Fi}



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


struct  BFu9ll_D_I  {
  __tsu64 v1:9;
  double v2;
  int v3;
};
//SIG(1 BFu9ll_D_I) C1{ FL:9 FL Fi}



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


struct  BFu9ll_D_Ip  {
  __tsu64 v1:9;
  double v2;
  int *v3;
};
//SIG(1 BFu9ll_D_Ip) C1{ FL:9 FL Fp}



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


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



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


struct  BFu9ll_D_S  {
  __tsu64 v1:9;
  double v2;
  short v3;
};
//SIG(1 BFu9ll_D_S) C1{ FL:9 FL Fs}



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


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



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


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



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


struct  BFu9ll_D_Ul  {
  __tsu64 v1:9;
  double v2;
  __tsu64 v3;
};
//SIG(1 BFu9ll_D_Ul) C1{ FL:9 FL[2]}



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


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



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


struct  BFu9ll_D_Vp  {
  __tsu64 v1:9;
  double v2;
  void *v3;
};
//SIG(1 BFu9ll_D_Vp) C1{ FL:9 FL Fp}



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


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



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


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



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


struct  BFu9ll_F_BFu15ll  {
  __tsu64 v1:9;
  float v2;
  __tsu64 v3:15;
};
//SIG(1 BFu9ll_F_BFu15ll) C1{ FL:9 Fi FL:15}



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9ll_F_BFu17ll  {
  __tsu64 v1:9;
  float v2;
  __tsu64 v3:17;
};
//SIG(1 BFu9ll_F_BFu17ll) C1{ FL:9 Fi FL:17}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9ll_F_BFu7ll  {
  __tsu64 v1:9;
  float v2;
  __tsu64 v3:7;
};
//SIG(1 BFu9ll_F_BFu7ll) C1{ FL:9 Fi FL:7}



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


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



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


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



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


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



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


struct  BFu9ll_F_BFu8ll  {
  __tsu64 v1:9;
  float v2;
  __tsu64 v3:8;
};
//SIG(1 BFu9ll_F_BFu8ll) C1{ FL:9 Fi FL:8}



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9ll_F_D  {
  __tsu64 v1:9;
  float v2;
  double v3;
};
//SIG(1 BFu9ll_F_D) C1{ FL:9 Fi FL}



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


struct  BFu9ll_F_F  {
  __tsu64 v1:9;
  float v2;
  float v3;
};
//SIG(1 BFu9ll_F_F) C1{ FL:9 Fi[2]}



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


struct  BFu9ll_F_I  {
  __tsu64 v1:9;
  float v2;
  int v3;
};
//SIG(1 BFu9ll_F_I) C1{ FL:9 Fi[2]}



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


struct  BFu9ll_F_Ip  {
  __tsu64 v1:9;
  float v2;
  int *v3;
};
//SIG(1 BFu9ll_F_Ip) C1{ FL:9 Fi Fp}



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


struct  BFu9ll_F_L  {
  __tsu64 v1:9;
  float v2;
  __tsi64 v3;
};
//SIG(1 BFu9ll_F_L) C1{ FL:9 Fi FL}



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


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



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


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



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


struct  BFu9ll_F_Ui  {
  __tsu64 v1:9;
  float v2;
  unsigned int v3;
};
//SIG(1 BFu9ll_F_Ui) C1{ FL:9 Fi[2]}



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


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



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


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



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


struct  BFu9ll_F_Vp  {
  __tsu64 v1:9;
  float v2;
  void *v3;
};
//SIG(1 BFu9ll_F_Vp) C1{ FL:9 Fi Fp}



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


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



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


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



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


struct  BFu9ll_I_BFu15ll  {
  __tsu64 v1:9;
  int v2;
  __tsu64 v3:15;
};
//SIG(1 BFu9ll_I_BFu15ll) C1{ FL:9 Fi FL:15}



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9ll_I_BFu17ll  {
  __tsu64 v1:9;
  int v2;
  __tsu64 v3:17;
};
//SIG(1 BFu9ll_I_BFu17ll) C1{ FL:9 Fi FL:17}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9ll_I_BFu7ll  {
  __tsu64 v1:9;
  int v2;
  __tsu64 v3:7;
};
//SIG(1 BFu9ll_I_BFu7ll) C1{ FL:9 Fi FL:7}



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


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



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


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



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


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



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


struct  BFu9ll_I_BFu8ll  {
  __tsu64 v1:9;
  int v2;
  __tsu64 v3:8;
};
//SIG(1 BFu9ll_I_BFu8ll) C1{ FL:9 Fi FL:8}



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9ll_I_D  {
  __tsu64 v1:9;
  int v2;
  double v3;
};
//SIG(1 BFu9ll_I_D) C1{ FL:9 Fi FL}



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


struct  BFu9ll_I_F  {
  __tsu64 v1:9;
  int v2;
  float v3;
};
//SIG(1 BFu9ll_I_F) C1{ FL:9 Fi[2]}



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


struct  BFu9ll_I_I  {
  __tsu64 v1:9;
  int v2;
  int v3;
};
//SIG(1 BFu9ll_I_I) C1{ FL:9 Fi[2]}



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


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



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


struct  BFu9ll_I_L  {
  __tsu64 v1:9;
  int v2;
  __tsi64 v3;
};
//SIG(1 BFu9ll_I_L) C1{ FL:9 Fi FL}



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


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



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


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



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


struct  BFu9ll_I_Ui  {
  __tsu64 v1:9;
  int v2;
  unsigned int v3;
};
//SIG(1 BFu9ll_I_Ui) C1{ FL:9 Fi[2]}



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9ll_Ip_BFu15ll  {
  __tsu64 v1:9;
  int *v2;
  __tsu64 v3:15;
};
//SIG(1 BFu9ll_Ip_BFu15ll) C1{ FL:9 Fp FL:15}



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9ll_Ip_BFu17ll  {
  __tsu64 v1:9;
  int *v2;
  __tsu64 v3:17;
};
//SIG(1 BFu9ll_Ip_BFu17ll) C1{ FL:9 Fp FL:17}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9ll_Ip_BFu7ll  {
  __tsu64 v1:9;
  int *v2;
  __tsu64 v3:7;
};
//SIG(1 BFu9ll_Ip_BFu7ll) C1{ FL:9 Fp FL:7}



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


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



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


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



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


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



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


struct  BFu9ll_Ip_BFu8ll  {
  __tsu64 v1:9;
  int *v2;
  __tsu64 v3:8;
};
//SIG(1 BFu9ll_Ip_BFu8ll) C1{ FL:9 Fp FL:8}



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9ll_Ip_D  {
  __tsu64 v1:9;
  int *v2;
  double v3;
};
//SIG(1 BFu9ll_Ip_D) C1{ FL:9 Fp FL}



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


struct  BFu9ll_Ip_F  {
  __tsu64 v1:9;
  int *v2;
  float v3;
};
//SIG(1 BFu9ll_Ip_F) C1{ FL:9 Fp Fi}



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


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



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


struct  BFu9ll_Ip_Ip  {
  __tsu64 v1:9;
  int *v2;
  int *v3;
};
//SIG(1 BFu9ll_Ip_Ip) C1{ FL:9 Fp[2]}



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


struct  BFu9ll_Ip_L  {
  __tsu64 v1:9;
  int *v2;
  __tsi64 v3;
};
//SIG(1 BFu9ll_Ip_L) C1{ FL:9 Fp FL}



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9ll_Ip_Vp  {
  __tsu64 v1:9;
  int *v2;
  void *v3;
};
//SIG(1 BFu9ll_Ip_Vp) C1{ FL:9 Fp[2]}



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


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



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


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



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


struct  BFu9ll_L_BFu15ll  {
  __tsu64 v1:9;
  __tsi64 v2;
  __tsu64 v3:15;
};
//SIG(1 BFu9ll_L_BFu15ll) C1{ FL:9 FL FL:15}



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9ll_L_BFu17ll  {
  __tsu64 v1:9;
  __tsi64 v2;
  __tsu64 v3:17;
};
//SIG(1 BFu9ll_L_BFu17ll) C1{ FL:9 FL FL:17}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9ll_L_BFu7ll  {
  __tsu64 v1:9;
  __tsi64 v2;
  __tsu64 v3:7;
};
//SIG(1 BFu9ll_L_BFu7ll) C1{ FL:9 FL FL:7}



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


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



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


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



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


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



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


struct  BFu9ll_L_BFu8ll  {
  __tsu64 v1:9;
  __tsi64 v2;
  __tsu64 v3:8;
};
//SIG(1 BFu9ll_L_BFu8ll) C1{ FL:9 FL FL:8}



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


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



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


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



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


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



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


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



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


struct  BFu9ll_L_C  {
  __tsu64 v1:9;
  __tsi64 v2;
  char v3;
};
//SIG(1 BFu9ll_L_C) C1{ FL:9 FL Fc}



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


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



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


struct  BFu9ll_L_F  {
  __tsu64 v1:9;
  __tsi64 v2;
  float v3;
};
//SIG(1 BFu9ll_L_F) C1{ FL:9 FL Fi}



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


struct  BFu9ll_L_I  {
  __tsu64 v1:9;
  __tsi64 v2;
  int v3;
};
//SIG(1 BFu9ll_L_I) C1{ FL:9 FL Fi}



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


struct  BFu9ll_L_Ip  {
  __tsu64 v1:9;
  __tsi64 v2;
  int *v3;
};
//SIG(1 BFu9ll_L_Ip) C1{ FL:9 FL Fp}



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


struct  BFu9ll_L_L  {
  __tsu64 v1:9;
  __tsi64 v2;
  __tsi64 v3;
};
//SIG(1 BFu9ll_L_L) C1{ FL:9 FL[2]}



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


struct  BFu9ll_L_S  {
  __tsu64 v1:9;
  __tsi64 v2;
  short v3;
};
//SIG(1 BFu9ll_L_S) C1{ FL:9 FL Fs}



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


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



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


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



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


struct  BFu9ll_L_Ul  {
  __tsu64 v1:9;
  __tsi64 v2;
  __tsu64 v3;
};
//SIG(1 BFu9ll_L_Ul) C1{ FL:9 FL[2]}



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


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



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


struct  BFu9ll_L_Vp  {
  __tsu64 v1:9;
  __tsi64 v2;
  void *v3;
};
//SIG(1 BFu9ll_L_Vp) C1{ FL:9 FL Fp}



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


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



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


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



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


struct  BFu9ll_S_BFu15ll  {
  __tsu64 v1:9;
  short v2;
  __tsu64 v3:15;
};
//SIG(1 BFu9ll_S_BFu15ll) C1{ FL:9 Fs FL:15}



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9ll_S_BFu17ll  {
  __tsu64 v1:9;
  short v2;
  __tsu64 v3:17;
};
//SIG(1 BFu9ll_S_BFu17ll) C1{ FL:9 Fs FL:17}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9ll_S_BFu7ll  {
  __tsu64 v1:9;
  short v2;
  __tsu64 v3:7;
};
//SIG(1 BFu9ll_S_BFu7ll) C1{ FL:9 Fs FL:7}



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


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



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


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



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


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



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


struct  BFu9ll_S_BFu8ll  {
  __tsu64 v1:9;
  short v2;
  __tsu64 v3:8;
};
//SIG(1 BFu9ll_S_BFu8ll) C1{ FL:9 Fs FL:8}



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9ll_S_D  {
  __tsu64 v1:9;
  short v2;
  double v3;
};
//SIG(1 BFu9ll_S_D) C1{ FL:9 Fs FL}



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


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



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


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



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


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



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


struct  BFu9ll_S_L  {
  __tsu64 v1:9;
  short v2;
  __tsi64 v3;
};
//SIG(1 BFu9ll_S_L) C1{ FL:9 Fs FL}



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


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



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


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



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


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



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


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



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


struct  BFu9ll_S_Us  {
  __tsu64 v1:9;
  short v2;
  unsigned short v3;
};
//SIG(1 BFu9ll_S_Us) C1{ FL:9 Fs[2]}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9ll_Uc_C  {
  __tsu64 v1:9;
  unsigned char v2;
  char v3;
};
//SIG(1 BFu9ll_Uc_C) C1{ FL:9 Fc[2]}



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9ll_Uc_Uc  {
  __tsu64 v1:9;
  unsigned char v2;
  unsigned char v3;
};
//SIG(1 BFu9ll_Uc_Uc) C1{ FL:9 Fc[2]}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9ll_Ui_F  {
  __tsu64 v1:9;
  unsigned int v2;
  float v3;
};
//SIG(1 BFu9ll_Ui_F) C1{ FL:9 Fi[2]}



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


struct  BFu9ll_Ui_I  {
  __tsu64 v1:9;
  unsigned int v2;
  int v3;
};
//SIG(1 BFu9ll_Ui_I) C1{ FL:9 Fi[2]}



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


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



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


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



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


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



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


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



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


struct  BFu9ll_Ui_Ui  {
  __tsu64 v1:9;
  unsigned int v2;
  unsigned int v3;
};
//SIG(1 BFu9ll_Ui_Ui) C1{ FL:9 Fi[2]}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9ll_Ul_D  {
  __tsu64 v1:9;
  __tsu64 v2;
  double v3;
};
//SIG(1 BFu9ll_Ul_D) C1{ FL:9 FL[2]}



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


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



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


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



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


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



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


struct  BFu9ll_Ul_L  {
  __tsu64 v1:9;
  __tsu64 v2;
  __tsi64 v3;
};
//SIG(1 BFu9ll_Ul_L) C1{ FL:9 FL[2]}



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


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



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


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



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


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



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


struct  BFu9ll_Ul_Ul  {
  __tsu64 v1:9;
  __tsu64 v2;
  __tsu64 v3;
};
//SIG(1 BFu9ll_Ul_Ul) C1{ FL:9 FL[2]}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9ll_Us_S  {
  __tsu64 v1:9;
  unsigned short v2;
  short v3;
};
//SIG(1 BFu9ll_Us_S) C1{ FL:9 Fs[2]}



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


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



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


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



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


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



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


struct  BFu9ll_Us_Us  {
  __tsu64 v1:9;
  unsigned short v2;
  unsigned short v3;
};
//SIG(1 BFu9ll_Us_Us) C1{ FL:9 Fs[2]}



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


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



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


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



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


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



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


struct  BFu9ll_Vp_BFu15ll  {
  __tsu64 v1:9;
  void *v2;
  __tsu64 v3:15;
};
//SIG(1 BFu9ll_Vp_BFu15ll) C1{ FL:9 Fp FL:15}



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9ll_Vp_BFu17ll  {
  __tsu64 v1:9;
  void *v2;
  __tsu64 v3:17;
};
//SIG(1 BFu9ll_Vp_BFu17ll) C1{ FL:9 Fp FL:17}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9ll_Vp_BFu7ll  {
  __tsu64 v1:9;
  void *v2;
  __tsu64 v3:7;
};
//SIG(1 BFu9ll_Vp_BFu7ll) C1{ FL:9 Fp FL:7}



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


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



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


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



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


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



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


struct  BFu9ll_Vp_BFu8ll  {
  __tsu64 v1:9;
  void *v2;
  __tsu64 v3:8;
};
//SIG(1 BFu9ll_Vp_BFu8ll) C1{ FL:9 Fp FL:8}



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9ll_Vp_D  {
  __tsu64 v1:9;
  void *v2;
  double v3;
};
//SIG(1 BFu9ll_Vp_D) C1{ FL:9 Fp FL}



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


struct  BFu9ll_Vp_F  {
  __tsu64 v1:9;
  void *v2;
  float v3;
};
//SIG(1 BFu9ll_Vp_F) C1{ FL:9 Fp Fi}



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


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



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


struct  BFu9ll_Vp_Ip  {
  __tsu64 v1:9;
  void *v2;
  int *v3;
};
//SIG(1 BFu9ll_Vp_Ip) C1{ FL:9 Fp[2]}



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


struct  BFu9ll_Vp_L  {
  __tsu64 v1:9;
  void *v2;
  __tsi64 v3;
};
//SIG(1 BFu9ll_Vp_L) C1{ FL:9 Fp FL}



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9ll_Vp_Vp  {
  __tsu64 v1:9;
  void *v2;
  void *v3;
};
//SIG(1 BFu9ll_Vp_Vp) C1{ FL:9 Fp[2]}



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


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



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


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



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


struct  BFu9s_BFs9i_BFs9i  {
  unsigned short v1:9;
  signed int v2:9;
  signed int v3:9;
};
//SIG(1 BFu9s_BFs9i_BFs9i) C1{ Fs:9 Fi:9 Fi:9}



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


struct  BFu9s_BFs9i_BFs9i_BFs9i  {
  unsigned short v1:9;
  signed int v2:9;
  signed int v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFs9i_BFs9i_BFs9i) C1{ Fs:9 Fi:9 Fi:9 Fi:9}



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


struct  BFu9s_BFs9i_BFs9i_BFs9ll  {
  unsigned short v1:9;
  signed int v2:9;
  signed int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFs9i_BFs9i_BFs9ll) C1{ Fs:9 Fi:9 Fi:9 FL:9}



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


struct  BFu9s_BFs9i_BFs9i_BFs9s  {
  unsigned short v1:9;
  signed int v2:9;
  signed int v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFs9i_BFs9i_BFs9s) C1{ Fs:9 Fi:9 Fi:9 Fs:9}



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


struct  BFu9s_BFs9i_BFs9i_BFu9i  {
  unsigned short v1:9;
  signed int v2:9;
  signed int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFs9i_BFs9i_BFu9i) C1{ Fs:9 Fi:9 Fi:9 Fi:9}



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


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



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


struct  BFu9s_BFs9i_BFs9i_BFu9s  {
  unsigned short v1:9;
  signed int v2:9;
  signed int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFs9i_BFs9i_BFu9s) C1{ Fs:9 Fi:9 Fi:9 Fs:9}



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


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



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


struct  BFu9s_BFs9i_BFs9ll_BFs9i  {
  unsigned short v1:9;
  signed int v2:9;
  signed __tsi64 v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFs9i_BFs9ll_BFs9i) C1{ Fs:9 Fi:9 FL:9 Fi:9}



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


struct  BFu9s_BFs9i_BFs9ll_BFs9ll  {
  unsigned short v1:9;
  signed int v2:9;
  signed __tsi64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFs9i_BFs9ll_BFs9ll) C1{ Fs:9 Fi:9 FL:9 FL:9}



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


struct  BFu9s_BFs9i_BFs9ll_BFs9s  {
  unsigned short v1:9;
  signed int v2:9;
  signed __tsi64 v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFs9i_BFs9ll_BFs9s) C1{ Fs:9 Fi:9 FL:9 Fs:9}



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


struct  BFu9s_BFs9i_BFs9ll_BFu9i  {
  unsigned short v1:9;
  signed int v2:9;
  signed __tsi64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFs9i_BFs9ll_BFu9i) C1{ Fs:9 Fi:9 FL:9 Fi:9}



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


struct  BFu9s_BFs9i_BFs9ll_BFu9ll  {
  unsigned short v1:9;
  signed int v2:9;
  signed __tsi64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFs9i_BFs9ll_BFu9ll) C1{ Fs:9 Fi:9 FL:9 FL:9}



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


struct  BFu9s_BFs9i_BFs9ll_BFu9s  {
  unsigned short v1:9;
  signed int v2:9;
  signed __tsi64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFs9i_BFs9ll_BFu9s) C1{ Fs:9 Fi:9 FL:9 Fs:9}



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


struct  BFu9s_BFs9i_BFs9s  {
  unsigned short v1:9;
  signed int v2:9;
  signed short v3:9;
};
//SIG(1 BFu9s_BFs9i_BFs9s) C1{ Fs:9 Fi:9 Fs:9}



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


struct  BFu9s_BFs9i_BFs9s_BFs9i  {
  unsigned short v1:9;
  signed int v2:9;
  signed short v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFs9i_BFs9s_BFs9i) C1{ Fs:9 Fi:9 Fs:9 Fi:9}



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


struct  BFu9s_BFs9i_BFs9s_BFs9ll  {
  unsigned short v1:9;
  signed int v2:9;
  signed short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFs9i_BFs9s_BFs9ll) C1{ Fs:9 Fi:9 Fs:9 FL:9}



static void Test_BFu9s_BFs9i_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFs9i_BFs9s_BFs9ll");
    static STRUCT_IF_C BFu9s_BFs9i_BFs9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9i_BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9i_BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9i_BFs9s_BFs9ll, BFu9s_BFs9i_BFs9s_BFs9ll)
//============================================================================


struct  BFu9s_BFs9i_BFs9s_BFs9s  {
  unsigned short v1:9;
  signed int v2:9;
  signed short v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFs9i_BFs9s_BFs9s) C1{ Fs:9 Fi:9 Fs:9 Fs:9}



static void Test_BFu9s_BFs9i_BFs9s_BFs9s()
{
  {
    init_simple_test("BFu9s_BFs9i_BFs9s_BFs9s");
    static STRUCT_IF_C BFu9s_BFs9i_BFs9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9i_BFs9s_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFs9i_BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9i_BFs9s_BFs9s, BFu9s_BFs9i_BFs9s_BFs9s)
//============================================================================


struct  BFu9s_BFs9i_BFs9s_BFu9i  {
  unsigned short v1:9;
  signed int v2:9;
  signed short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFs9i_BFs9s_BFu9i) C1{ Fs:9 Fi:9 Fs:9 Fi:9}



static void Test_BFu9s_BFs9i_BFs9s_BFu9i()
{
  {
    init_simple_test("BFu9s_BFs9i_BFs9s_BFu9i");
    static STRUCT_IF_C BFu9s_BFs9i_BFs9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9i_BFs9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFs9i_BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9i_BFs9s_BFu9i, BFu9s_BFs9i_BFs9s_BFu9i)
//============================================================================


struct  BFu9s_BFs9i_BFs9s_BFu9ll  {
  unsigned short v1:9;
  signed int v2:9;
  signed short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFs9i_BFs9s_BFu9ll) C1{ Fs:9 Fi:9 Fs:9 FL:9}



static void Test_BFu9s_BFs9i_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFs9i_BFs9s_BFu9ll");
    static STRUCT_IF_C BFu9s_BFs9i_BFs9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9i_BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9i_BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9i_BFs9s_BFu9ll, BFu9s_BFs9i_BFs9s_BFu9ll)
//============================================================================


struct  BFu9s_BFs9i_BFs9s_BFu9s  {
  unsigned short v1:9;
  signed int v2:9;
  signed short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFs9i_BFs9s_BFu9s) C1{ Fs:9 Fi:9 Fs:9 Fs:9}



static void Test_BFu9s_BFs9i_BFs9s_BFu9s()
{
  {
    init_simple_test("BFu9s_BFs9i_BFs9s_BFu9s");
    static STRUCT_IF_C BFu9s_BFs9i_BFs9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9i_BFs9s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFs9i_BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9i_BFs9s_BFu9s, BFu9s_BFs9i_BFs9s_BFu9s)
//============================================================================


struct  BFu9s_BFs9i_BFu9i  {
  unsigned short v1:9;
  signed int v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFs9i_BFu9i) C1{ Fs:9 Fi:9 Fi:9}



static void Test_BFu9s_BFs9i_BFu9i()
{
  {
    init_simple_test("BFu9s_BFs9i_BFu9i");
    static STRUCT_IF_C BFu9s_BFs9i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFs9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFs9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9i_BFu9i, BFu9s_BFs9i_BFu9i)
//============================================================================


struct  BFu9s_BFs9i_BFu9i_BFs9i  {
  unsigned short v1:9;
  signed int v2:9;
  unsigned int v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFs9i_BFu9i_BFs9i) C1{ Fs:9 Fi:9 Fi:9 Fi:9}



static void Test_BFu9s_BFs9i_BFu9i_BFs9i()
{
  {
    init_simple_test("BFu9s_BFs9i_BFu9i_BFs9i");
    static STRUCT_IF_C BFu9s_BFs9i_BFu9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9i_BFu9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFs9i_BFu9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9i_BFu9i_BFs9i, BFu9s_BFs9i_BFu9i_BFs9i)
//============================================================================


struct  BFu9s_BFs9i_BFu9i_BFs9ll  {
  unsigned short v1:9;
  signed int v2:9;
  unsigned int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFs9i_BFu9i_BFs9ll) C1{ Fs:9 Fi:9 Fi:9 FL:9}



static void Test_BFu9s_BFs9i_BFu9i_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFs9i_BFu9i_BFs9ll");
    static STRUCT_IF_C BFu9s_BFs9i_BFu9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9i_BFu9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9i_BFu9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9i_BFu9i_BFs9ll, BFu9s_BFs9i_BFu9i_BFs9ll)
//============================================================================


struct  BFu9s_BFs9i_BFu9i_BFs9s  {
  unsigned short v1:9;
  signed int v2:9;
  unsigned int v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFs9i_BFu9i_BFs9s) C1{ Fs:9 Fi:9 Fi:9 Fs:9}



static void Test_BFu9s_BFs9i_BFu9i_BFs9s()
{
  {
    init_simple_test("BFu9s_BFs9i_BFu9i_BFs9s");
    static STRUCT_IF_C BFu9s_BFs9i_BFu9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9i_BFu9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFs9i_BFu9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9i_BFu9i_BFs9s, BFu9s_BFs9i_BFu9i_BFs9s)
//============================================================================


struct  BFu9s_BFs9i_BFu9i_BFu9i  {
  unsigned short v1:9;
  signed int v2:9;
  unsigned int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFs9i_BFu9i_BFu9i) C1{ Fs:9 Fi:9 Fi:9 Fi:9}



static void Test_BFu9s_BFs9i_BFu9i_BFu9i()
{
  {
    init_simple_test("BFu9s_BFs9i_BFu9i_BFu9i");
    static STRUCT_IF_C BFu9s_BFs9i_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9i_BFu9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFs9i_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9i_BFu9i_BFu9i, BFu9s_BFs9i_BFu9i_BFu9i)
//============================================================================


struct  BFu9s_BFs9i_BFu9i_BFu9ll  {
  unsigned short v1:9;
  signed int v2:9;
  unsigned int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFs9i_BFu9i_BFu9ll) C1{ Fs:9 Fi:9 Fi:9 FL:9}



static void Test_BFu9s_BFs9i_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFs9i_BFu9i_BFu9ll");
    static STRUCT_IF_C BFu9s_BFs9i_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9i_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9i_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9i_BFu9i_BFu9ll, BFu9s_BFs9i_BFu9i_BFu9ll)
//============================================================================


struct  BFu9s_BFs9i_BFu9i_BFu9s  {
  unsigned short v1:9;
  signed int v2:9;
  unsigned int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFs9i_BFu9i_BFu9s) C1{ Fs:9 Fi:9 Fi:9 Fs:9}



static void Test_BFu9s_BFs9i_BFu9i_BFu9s()
{
  {
    init_simple_test("BFu9s_BFs9i_BFu9i_BFu9s");
    static STRUCT_IF_C BFu9s_BFs9i_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9i_BFu9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFs9i_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9i_BFu9i_BFu9s, BFu9s_BFs9i_BFu9i_BFu9s)
//============================================================================


struct  BFu9s_BFs9i_BFu9ll  {
  unsigned short v1:9;
  signed int v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFs9i_BFu9ll) C1{ Fs:9 Fi:9 FL:9}



static void Test_BFu9s_BFs9i_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFs9i_BFu9ll");
    static STRUCT_IF_C BFu9s_BFs9i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFs9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9i_BFu9ll, BFu9s_BFs9i_BFu9ll)
//============================================================================


struct  BFu9s_BFs9i_BFu9ll_BFs9i  {
  unsigned short v1:9;
  signed int v2:9;
  __tsu64 v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFs9i_BFu9ll_BFs9i) C1{ Fs:9 Fi:9 FL:9 Fi:9}



static void Test_BFu9s_BFs9i_BFu9ll_BFs9i()
{
  {
    init_simple_test("BFu9s_BFs9i_BFu9ll_BFs9i");
    static STRUCT_IF_C BFu9s_BFs9i_BFu9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9i_BFu9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9i_BFu9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9i_BFu9ll_BFs9i, BFu9s_BFs9i_BFu9ll_BFs9i)
//============================================================================


struct  BFu9s_BFs9i_BFu9ll_BFs9ll  {
  unsigned short v1:9;
  signed int v2:9;
  __tsu64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFs9i_BFu9ll_BFs9ll) C1{ Fs:9 Fi:9 FL:9 FL:9}



static void Test_BFu9s_BFs9i_BFu9ll_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFs9i_BFu9ll_BFs9ll");
    static STRUCT_IF_C BFu9s_BFs9i_BFu9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9i_BFu9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9i_BFu9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9i_BFu9ll_BFs9ll, BFu9s_BFs9i_BFu9ll_BFs9ll)
//============================================================================


struct  BFu9s_BFs9i_BFu9ll_BFs9s  {
  unsigned short v1:9;
  signed int v2:9;
  __tsu64 v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFs9i_BFu9ll_BFs9s) C1{ Fs:9 Fi:9 FL:9 Fs:9}



static void Test_BFu9s_BFs9i_BFu9ll_BFs9s()
{
  {
    init_simple_test("BFu9s_BFs9i_BFu9ll_BFs9s");
    static STRUCT_IF_C BFu9s_BFs9i_BFu9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9i_BFu9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9i_BFu9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9i_BFu9ll_BFs9s, BFu9s_BFs9i_BFu9ll_BFs9s)
//============================================================================


struct  BFu9s_BFs9i_BFu9ll_BFu9i  {
  unsigned short v1:9;
  signed int v2:9;
  __tsu64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFs9i_BFu9ll_BFu9i) C1{ Fs:9 Fi:9 FL:9 Fi:9}



static void Test_BFu9s_BFs9i_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFu9s_BFs9i_BFu9ll_BFu9i");
    static STRUCT_IF_C BFu9s_BFs9i_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9i_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9i_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9i_BFu9ll_BFu9i, BFu9s_BFs9i_BFu9ll_BFu9i)
//============================================================================


struct  BFu9s_BFs9i_BFu9ll_BFu9ll  {
  unsigned short v1:9;
  signed int v2:9;
  __tsu64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFs9i_BFu9ll_BFu9ll) C1{ Fs:9 Fi:9 FL:9 FL:9}



static void Test_BFu9s_BFs9i_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFs9i_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFu9s_BFs9i_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9i_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9i_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9i_BFu9ll_BFu9ll, BFu9s_BFs9i_BFu9ll_BFu9ll)
//============================================================================


struct  BFu9s_BFs9i_BFu9ll_BFu9s  {
  unsigned short v1:9;
  signed int v2:9;
  __tsu64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFs9i_BFu9ll_BFu9s) C1{ Fs:9 Fi:9 FL:9 Fs:9}



static void Test_BFu9s_BFs9i_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFu9s_BFs9i_BFu9ll_BFu9s");
    static STRUCT_IF_C BFu9s_BFs9i_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9i_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9i_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9i_BFu9ll_BFu9s, BFu9s_BFs9i_BFu9ll_BFu9s)
//============================================================================


struct  BFu9s_BFs9i_BFu9s  {
  unsigned short v1:9;
  signed int v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFs9i_BFu9s) C1{ Fs:9 Fi:9 Fs:9}



static void Test_BFu9s_BFs9i_BFu9s()
{
  {
    init_simple_test("BFu9s_BFs9i_BFu9s");
    static STRUCT_IF_C BFu9s_BFs9i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFs9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFs9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9i_BFu9s, BFu9s_BFs9i_BFu9s)
//============================================================================


struct  BFu9s_BFs9i_BFu9s_BFs9i  {
  unsigned short v1:9;
  signed int v2:9;
  unsigned short v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFs9i_BFu9s_BFs9i) C1{ Fs:9 Fi:9 Fs:9 Fi:9}



static void Test_BFu9s_BFs9i_BFu9s_BFs9i()
{
  {
    init_simple_test("BFu9s_BFs9i_BFu9s_BFs9i");
    static STRUCT_IF_C BFu9s_BFs9i_BFu9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9i_BFu9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFs9i_BFu9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9i_BFu9s_BFs9i, BFu9s_BFs9i_BFu9s_BFs9i)
//============================================================================


struct  BFu9s_BFs9i_BFu9s_BFs9ll  {
  unsigned short v1:9;
  signed int v2:9;
  unsigned short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFs9i_BFu9s_BFs9ll) C1{ Fs:9 Fi:9 Fs:9 FL:9}



static void Test_BFu9s_BFs9i_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFs9i_BFu9s_BFs9ll");
    static STRUCT_IF_C BFu9s_BFs9i_BFu9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9i_BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9i_BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9i_BFu9s_BFs9ll, BFu9s_BFs9i_BFu9s_BFs9ll)
//============================================================================


struct  BFu9s_BFs9i_BFu9s_BFs9s  {
  unsigned short v1:9;
  signed int v2:9;
  unsigned short v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFs9i_BFu9s_BFs9s) C1{ Fs:9 Fi:9 Fs:9 Fs:9}



static void Test_BFu9s_BFs9i_BFu9s_BFs9s()
{
  {
    init_simple_test("BFu9s_BFs9i_BFu9s_BFs9s");
    static STRUCT_IF_C BFu9s_BFs9i_BFu9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9i_BFu9s_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFs9i_BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9i_BFu9s_BFs9s, BFu9s_BFs9i_BFu9s_BFs9s)
//============================================================================


struct  BFu9s_BFs9i_BFu9s_BFu9i  {
  unsigned short v1:9;
  signed int v2:9;
  unsigned short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFs9i_BFu9s_BFu9i) C1{ Fs:9 Fi:9 Fs:9 Fi:9}



static void Test_BFu9s_BFs9i_BFu9s_BFu9i()
{
  {
    init_simple_test("BFu9s_BFs9i_BFu9s_BFu9i");
    static STRUCT_IF_C BFu9s_BFs9i_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9i_BFu9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFs9i_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9i_BFu9s_BFu9i, BFu9s_BFs9i_BFu9s_BFu9i)
//============================================================================


struct  BFu9s_BFs9i_BFu9s_BFu9ll  {
  unsigned short v1:9;
  signed int v2:9;
  unsigned short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFs9i_BFu9s_BFu9ll) C1{ Fs:9 Fi:9 Fs:9 FL:9}



static void Test_BFu9s_BFs9i_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFs9i_BFu9s_BFu9ll");
    static STRUCT_IF_C BFu9s_BFs9i_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9i_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9i_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9i_BFu9s_BFu9ll, BFu9s_BFs9i_BFu9s_BFu9ll)
//============================================================================


struct  BFu9s_BFs9i_BFu9s_BFu9s  {
  unsigned short v1:9;
  signed int v2:9;
  unsigned short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFs9i_BFu9s_BFu9s) C1{ Fs:9 Fi:9 Fs:9 Fs:9}



static void Test_BFu9s_BFs9i_BFu9s_BFu9s()
{
  {
    init_simple_test("BFu9s_BFs9i_BFu9s_BFu9s");
    static STRUCT_IF_C BFu9s_BFs9i_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9i_BFu9s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFs9i_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9i_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9i_BFu9s_BFu9s, BFu9s_BFs9i_BFu9s_BFu9s)
//============================================================================


struct  BFu9s_BFs9ll  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
};
//SIG(1 BFu9s_BFs9ll) C1{ Fs:9 FL:9}



static void Test_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFs9ll");
    static STRUCT_IF_C BFu9s_BFs9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll, BFu9s_BFs9ll)
//============================================================================


struct  BFu9s_BFs9ll_BFs9i  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  signed int v3:9;
};
//SIG(1 BFu9s_BFs9ll_BFs9i) C1{ Fs:9 FL:9 Fi:9}



static void Test_BFu9s_BFs9ll_BFs9i()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFs9i");
    static STRUCT_IF_C BFu9s_BFs9ll_BFs9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFs9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFs9i, BFu9s_BFs9ll_BFs9i)
//============================================================================


struct  BFu9s_BFs9ll_BFs9i_BFs9i  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  signed int v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFs9i_BFs9i) C1{ Fs:9 FL:9 Fi:9 Fi:9}



static void Test_BFu9s_BFs9ll_BFs9i_BFs9i()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFs9i_BFs9i");
    static STRUCT_IF_C BFu9s_BFs9ll_BFs9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFs9i_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFs9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFs9i_BFs9i, BFu9s_BFs9ll_BFs9i_BFs9i)
//============================================================================


struct  BFu9s_BFs9ll_BFs9i_BFs9ll  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  signed int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFs9i_BFs9ll) C1{ Fs:9 FL:9 Fi:9 FL:9}



static void Test_BFu9s_BFs9ll_BFs9i_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFs9i_BFs9ll");
    static STRUCT_IF_C BFu9s_BFs9ll_BFs9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFs9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFs9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFs9i_BFs9ll, BFu9s_BFs9ll_BFs9i_BFs9ll)
//============================================================================


struct  BFu9s_BFs9ll_BFs9i_BFs9s  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  signed int v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFs9i_BFs9s) C1{ Fs:9 FL:9 Fi:9 Fs:9}



static void Test_BFu9s_BFs9ll_BFs9i_BFs9s()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFs9i_BFs9s");
    static STRUCT_IF_C BFu9s_BFs9ll_BFs9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFs9i_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFs9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFs9i_BFs9s, BFu9s_BFs9ll_BFs9i_BFs9s)
//============================================================================


struct  BFu9s_BFs9ll_BFs9i_BFu9i  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  signed int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFs9i_BFu9i) C1{ Fs:9 FL:9 Fi:9 Fi:9}



static void Test_BFu9s_BFs9ll_BFs9i_BFu9i()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFs9i_BFu9i");
    static STRUCT_IF_C BFu9s_BFs9ll_BFs9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFs9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFs9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFs9i_BFu9i, BFu9s_BFs9ll_BFs9i_BFu9i)
//============================================================================


struct  BFu9s_BFs9ll_BFs9i_BFu9ll  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  signed int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFs9i_BFu9ll) C1{ Fs:9 FL:9 Fi:9 FL:9}



static void Test_BFu9s_BFs9ll_BFs9i_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFs9i_BFu9ll");
    static STRUCT_IF_C BFu9s_BFs9ll_BFs9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFs9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFs9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFs9i_BFu9ll, BFu9s_BFs9ll_BFs9i_BFu9ll)
//============================================================================


struct  BFu9s_BFs9ll_BFs9i_BFu9s  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  signed int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFs9i_BFu9s) C1{ Fs:9 FL:9 Fi:9 Fs:9}



static void Test_BFu9s_BFs9ll_BFs9i_BFu9s()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFs9i_BFu9s");
    static STRUCT_IF_C BFu9s_BFs9ll_BFs9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFs9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFs9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFs9i_BFu9s, BFu9s_BFs9ll_BFs9i_BFu9s)
//============================================================================


struct  BFu9s_BFs9ll_BFs9ll  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  signed __tsi64 v3:9;
};
//SIG(1 BFu9s_BFs9ll_BFs9ll) C1{ Fs:9 FL:9 FL:9}



static void Test_BFu9s_BFs9ll_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFs9ll");
    static STRUCT_IF_C BFu9s_BFs9ll_BFs9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFs9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFs9ll, BFu9s_BFs9ll_BFs9ll)
//============================================================================


struct  BFu9s_BFs9ll_BFs9ll_BFs9i  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  signed __tsi64 v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFs9ll_BFs9i) C1{ Fs:9 FL:9 FL:9 Fi:9}



static void Test_BFu9s_BFs9ll_BFs9ll_BFs9i()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFs9ll_BFs9i");
    static STRUCT_IF_C BFu9s_BFs9ll_BFs9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFs9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFs9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFs9ll_BFs9i, BFu9s_BFs9ll_BFs9ll_BFs9i)
//============================================================================


struct  BFu9s_BFs9ll_BFs9ll_BFs9ll  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  signed __tsi64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFs9ll_BFs9ll) C1{ Fs:9 FL:9 FL:9 FL:9}



static void Test_BFu9s_BFs9ll_BFs9ll_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFs9ll_BFs9ll");
    static STRUCT_IF_C BFu9s_BFs9ll_BFs9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFs9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFs9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFs9ll_BFs9ll, BFu9s_BFs9ll_BFs9ll_BFs9ll)
//============================================================================


struct  BFu9s_BFs9ll_BFs9ll_BFs9s  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  signed __tsi64 v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFs9ll_BFs9s) C1{ Fs:9 FL:9 FL:9 Fs:9}



static void Test_BFu9s_BFs9ll_BFs9ll_BFs9s()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFs9ll_BFs9s");
    static STRUCT_IF_C BFu9s_BFs9ll_BFs9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFs9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFs9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFs9ll_BFs9s, BFu9s_BFs9ll_BFs9ll_BFs9s)
//============================================================================


struct  BFu9s_BFs9ll_BFs9ll_BFu9i  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  signed __tsi64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFs9ll_BFu9i) C1{ Fs:9 FL:9 FL:9 Fi:9}



static void Test_BFu9s_BFs9ll_BFs9ll_BFu9i()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFs9ll_BFu9i");
    static STRUCT_IF_C BFu9s_BFs9ll_BFs9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFs9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFs9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFs9ll_BFu9i, BFu9s_BFs9ll_BFs9ll_BFu9i)
//============================================================================


struct  BFu9s_BFs9ll_BFs9ll_BFu9ll  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  signed __tsi64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFs9ll_BFu9ll) C1{ Fs:9 FL:9 FL:9 FL:9}



static void Test_BFu9s_BFs9ll_BFs9ll_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFs9ll_BFu9ll");
    static STRUCT_IF_C BFu9s_BFs9ll_BFs9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFs9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFs9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFs9ll_BFu9ll, BFu9s_BFs9ll_BFs9ll_BFu9ll)
//============================================================================


struct  BFu9s_BFs9ll_BFs9ll_BFu9s  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  signed __tsi64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFs9ll_BFu9s) C1{ Fs:9 FL:9 FL:9 Fs:9}



static void Test_BFu9s_BFs9ll_BFs9ll_BFu9s()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFs9ll_BFu9s");
    static STRUCT_IF_C BFu9s_BFs9ll_BFs9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFs9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFs9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFs9ll_BFu9s, BFu9s_BFs9ll_BFs9ll_BFu9s)
//============================================================================


struct  BFu9s_BFs9ll_BFs9s  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  signed short v3:9;
};
//SIG(1 BFu9s_BFs9ll_BFs9s) C1{ Fs:9 FL:9 Fs:9}



static void Test_BFu9s_BFs9ll_BFs9s()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFs9s");
    static STRUCT_IF_C BFu9s_BFs9ll_BFs9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFs9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFs9s, BFu9s_BFs9ll_BFs9s)
//============================================================================


struct  BFu9s_BFs9ll_BFs9s_BFs9i  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  signed short v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFs9s_BFs9i) C1{ Fs:9 FL:9 Fs:9 Fi:9}



static void Test_BFu9s_BFs9ll_BFs9s_BFs9i()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFs9s_BFs9i");
    static STRUCT_IF_C BFu9s_BFs9ll_BFs9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFs9s_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFs9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFs9s_BFs9i, BFu9s_BFs9ll_BFs9s_BFs9i)
//============================================================================


struct  BFu9s_BFs9ll_BFs9s_BFs9ll  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  signed short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFs9s_BFs9ll) C1{ Fs:9 FL:9 Fs:9 FL:9}



static void Test_BFu9s_BFs9ll_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFs9s_BFs9ll");
    static STRUCT_IF_C BFu9s_BFs9ll_BFs9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFs9s_BFs9ll, BFu9s_BFs9ll_BFs9s_BFs9ll)
//============================================================================


struct  BFu9s_BFs9ll_BFs9s_BFs9s  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  signed short v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFs9s_BFs9s) C1{ Fs:9 FL:9 Fs:9 Fs:9}



static void Test_BFu9s_BFs9ll_BFs9s_BFs9s()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFs9s_BFs9s");
    static STRUCT_IF_C BFu9s_BFs9ll_BFs9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFs9s_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFs9s_BFs9s, BFu9s_BFs9ll_BFs9s_BFs9s)
//============================================================================


struct  BFu9s_BFs9ll_BFs9s_BFu9i  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  signed short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFs9s_BFu9i) C1{ Fs:9 FL:9 Fs:9 Fi:9}



static void Test_BFu9s_BFs9ll_BFs9s_BFu9i()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFs9s_BFu9i");
    static STRUCT_IF_C BFu9s_BFs9ll_BFs9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFs9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFs9s_BFu9i, BFu9s_BFs9ll_BFs9s_BFu9i)
//============================================================================


struct  BFu9s_BFs9ll_BFs9s_BFu9ll  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  signed short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFs9s_BFu9ll) C1{ Fs:9 FL:9 Fs:9 FL:9}



static void Test_BFu9s_BFs9ll_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFs9s_BFu9ll");
    static STRUCT_IF_C BFu9s_BFs9ll_BFs9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFs9s_BFu9ll, BFu9s_BFs9ll_BFs9s_BFu9ll)
//============================================================================


struct  BFu9s_BFs9ll_BFs9s_BFu9s  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  signed short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFs9s_BFu9s) C1{ Fs:9 FL:9 Fs:9 Fs:9}



static void Test_BFu9s_BFs9ll_BFs9s_BFu9s()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFs9s_BFu9s");
    static STRUCT_IF_C BFu9s_BFs9ll_BFs9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFs9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFs9s_BFu9s, BFu9s_BFs9ll_BFs9s_BFu9s)
//============================================================================


struct  BFu9s_BFs9ll_BFu9i  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFs9ll_BFu9i) C1{ Fs:9 FL:9 Fi:9}



static void Test_BFu9s_BFs9ll_BFu9i()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFu9i");
    static STRUCT_IF_C BFu9s_BFs9ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFs9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFu9i, BFu9s_BFs9ll_BFu9i)
//============================================================================


struct  BFu9s_BFs9ll_BFu9i_BFs9i  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  unsigned int v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFu9i_BFs9i) C1{ Fs:9 FL:9 Fi:9 Fi:9}



static void Test_BFu9s_BFs9ll_BFu9i_BFs9i()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFu9i_BFs9i");
    static STRUCT_IF_C BFu9s_BFs9ll_BFu9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFu9i_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFu9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFu9i_BFs9i, BFu9s_BFs9ll_BFu9i_BFs9i)
//============================================================================


struct  BFu9s_BFs9ll_BFu9i_BFs9ll  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  unsigned int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFu9i_BFs9ll) C1{ Fs:9 FL:9 Fi:9 FL:9}



static void Test_BFu9s_BFs9ll_BFu9i_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFu9i_BFs9ll");
    static STRUCT_IF_C BFu9s_BFs9ll_BFu9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFu9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFu9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFu9i_BFs9ll, BFu9s_BFs9ll_BFu9i_BFs9ll)
//============================================================================


struct  BFu9s_BFs9ll_BFu9i_BFs9s  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  unsigned int v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFu9i_BFs9s) C1{ Fs:9 FL:9 Fi:9 Fs:9}



static void Test_BFu9s_BFs9ll_BFu9i_BFs9s()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFu9i_BFs9s");
    static STRUCT_IF_C BFu9s_BFs9ll_BFu9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFu9i_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFu9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFu9i_BFs9s, BFu9s_BFs9ll_BFu9i_BFs9s)
//============================================================================


struct  BFu9s_BFs9ll_BFu9i_BFu9i  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  unsigned int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFu9i_BFu9i) C1{ Fs:9 FL:9 Fi:9 Fi:9}



static void Test_BFu9s_BFs9ll_BFu9i_BFu9i()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFu9i_BFu9i");
    static STRUCT_IF_C BFu9s_BFs9ll_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFu9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFu9i_BFu9i, BFu9s_BFs9ll_BFu9i_BFu9i)
//============================================================================


struct  BFu9s_BFs9ll_BFu9i_BFu9ll  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  unsigned int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFu9i_BFu9ll) C1{ Fs:9 FL:9 Fi:9 FL:9}



static void Test_BFu9s_BFs9ll_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFu9i_BFu9ll");
    static STRUCT_IF_C BFu9s_BFs9ll_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFu9i_BFu9ll, BFu9s_BFs9ll_BFu9i_BFu9ll)
//============================================================================


struct  BFu9s_BFs9ll_BFu9i_BFu9s  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  unsigned int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFu9i_BFu9s) C1{ Fs:9 FL:9 Fi:9 Fs:9}



static void Test_BFu9s_BFs9ll_BFu9i_BFu9s()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFu9i_BFu9s");
    static STRUCT_IF_C BFu9s_BFs9ll_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFu9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFu9i_BFu9s, BFu9s_BFs9ll_BFu9i_BFu9s)
//============================================================================


struct  BFu9s_BFs9ll_BFu9ll  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFs9ll_BFu9ll) C1{ Fs:9 FL:9 FL:9}



static void Test_BFu9s_BFs9ll_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFu9ll");
    static STRUCT_IF_C BFu9s_BFs9ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFs9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFu9ll, BFu9s_BFs9ll_BFu9ll)
//============================================================================


struct  BFu9s_BFs9ll_BFu9ll_BFs9i  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  __tsu64 v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFu9ll_BFs9i) C1{ Fs:9 FL:9 FL:9 Fi:9}



static void Test_BFu9s_BFs9ll_BFu9ll_BFs9i()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFu9ll_BFs9i");
    static STRUCT_IF_C BFu9s_BFs9ll_BFu9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFu9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFu9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFu9ll_BFs9i, BFu9s_BFs9ll_BFu9ll_BFs9i)
//============================================================================


struct  BFu9s_BFs9ll_BFu9ll_BFs9ll  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  __tsu64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFu9ll_BFs9ll) C1{ Fs:9 FL:9 FL:9 FL:9}



static void Test_BFu9s_BFs9ll_BFu9ll_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFu9ll_BFs9ll");
    static STRUCT_IF_C BFu9s_BFs9ll_BFu9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFu9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFu9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFu9ll_BFs9ll, BFu9s_BFs9ll_BFu9ll_BFs9ll)
//============================================================================


struct  BFu9s_BFs9ll_BFu9ll_BFs9s  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  __tsu64 v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFu9ll_BFs9s) C1{ Fs:9 FL:9 FL:9 Fs:9}



static void Test_BFu9s_BFs9ll_BFu9ll_BFs9s()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFu9ll_BFs9s");
    static STRUCT_IF_C BFu9s_BFs9ll_BFu9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFu9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFu9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFu9ll_BFs9s, BFu9s_BFs9ll_BFu9ll_BFs9s)
//============================================================================


struct  BFu9s_BFs9ll_BFu9ll_BFu9i  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  __tsu64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFu9ll_BFu9i) C1{ Fs:9 FL:9 FL:9 Fi:9}



static void Test_BFu9s_BFs9ll_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFu9ll_BFu9i");
    static STRUCT_IF_C BFu9s_BFs9ll_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFu9ll_BFu9i, BFu9s_BFs9ll_BFu9ll_BFu9i)
//============================================================================


struct  BFu9s_BFs9ll_BFu9ll_BFu9ll  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  __tsu64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFu9ll_BFu9ll) C1{ Fs:9 FL:9 FL:9 FL:9}



static void Test_BFu9s_BFs9ll_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFu9s_BFs9ll_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFu9ll_BFu9ll, BFu9s_BFs9ll_BFu9ll_BFu9ll)
//============================================================================


struct  BFu9s_BFs9ll_BFu9ll_BFu9s  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  __tsu64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFu9ll_BFu9s) C1{ Fs:9 FL:9 FL:9 Fs:9}



static void Test_BFu9s_BFs9ll_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFu9ll_BFu9s");
    static STRUCT_IF_C BFu9s_BFs9ll_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFu9ll_BFu9s, BFu9s_BFs9ll_BFu9ll_BFu9s)
//============================================================================


struct  BFu9s_BFs9ll_BFu9s  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFs9ll_BFu9s) C1{ Fs:9 FL:9 Fs:9}



static void Test_BFu9s_BFs9ll_BFu9s()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFu9s");
    static STRUCT_IF_C BFu9s_BFs9ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFs9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFu9s, BFu9s_BFs9ll_BFu9s)
//============================================================================


struct  BFu9s_BFs9ll_BFu9s_BFs9i  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  unsigned short v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFu9s_BFs9i) C1{ Fs:9 FL:9 Fs:9 Fi:9}



static void Test_BFu9s_BFs9ll_BFu9s_BFs9i()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFu9s_BFs9i");
    static STRUCT_IF_C BFu9s_BFs9ll_BFu9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFu9s_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFu9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFu9s_BFs9i, BFu9s_BFs9ll_BFu9s_BFs9i)
//============================================================================


struct  BFu9s_BFs9ll_BFu9s_BFs9ll  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  unsigned short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFu9s_BFs9ll) C1{ Fs:9 FL:9 Fs:9 FL:9}



static void Test_BFu9s_BFs9ll_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFu9s_BFs9ll");
    static STRUCT_IF_C BFu9s_BFs9ll_BFu9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFu9s_BFs9ll, BFu9s_BFs9ll_BFu9s_BFs9ll)
//============================================================================


struct  BFu9s_BFs9ll_BFu9s_BFs9s  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  unsigned short v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFu9s_BFs9s) C1{ Fs:9 FL:9 Fs:9 Fs:9}



static void Test_BFu9s_BFs9ll_BFu9s_BFs9s()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFu9s_BFs9s");
    static STRUCT_IF_C BFu9s_BFs9ll_BFu9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFu9s_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFu9s_BFs9s, BFu9s_BFs9ll_BFu9s_BFs9s)
//============================================================================


struct  BFu9s_BFs9ll_BFu9s_BFu9i  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  unsigned short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFu9s_BFu9i) C1{ Fs:9 FL:9 Fs:9 Fi:9}



static void Test_BFu9s_BFs9ll_BFu9s_BFu9i()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFu9s_BFu9i");
    static STRUCT_IF_C BFu9s_BFs9ll_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFu9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFu9s_BFu9i, BFu9s_BFs9ll_BFu9s_BFu9i)
//============================================================================


struct  BFu9s_BFs9ll_BFu9s_BFu9ll  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  unsigned short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFu9s_BFu9ll) C1{ Fs:9 FL:9 Fs:9 FL:9}



static void Test_BFu9s_BFs9ll_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFu9s_BFu9ll");
    static STRUCT_IF_C BFu9s_BFs9ll_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFu9s_BFu9ll, BFu9s_BFs9ll_BFu9s_BFu9ll)
//============================================================================


struct  BFu9s_BFs9ll_BFu9s_BFu9s  {
  unsigned short v1:9;
  signed __tsi64 v2:9;
  unsigned short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFs9ll_BFu9s_BFu9s) C1{ Fs:9 FL:9 Fs:9 Fs:9}



static void Test_BFu9s_BFs9ll_BFu9s_BFu9s()
{
  {
    init_simple_test("BFu9s_BFs9ll_BFu9s_BFu9s");
    static STRUCT_IF_C BFu9s_BFs9ll_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9ll_BFu9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9ll_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9ll_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9ll_BFu9s_BFu9s, BFu9s_BFs9ll_BFu9s_BFu9s)
//============================================================================


struct  BFu9s_BFs9s  {
  unsigned short v1:9;
  signed short v2:9;
};
//SIG(1 BFu9s_BFs9s) C1{ Fs:9 Fs:9}



static void Test_BFu9s_BFs9s()
{
  {
    init_simple_test("BFu9s_BFs9s");
    static STRUCT_IF_C BFu9s_BFs9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFs9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s, BFu9s_BFs9s)
//============================================================================


struct  BFu9s_BFs9s_BFs9i  {
  unsigned short v1:9;
  signed short v2:9;
  signed int v3:9;
};
//SIG(1 BFu9s_BFs9s_BFs9i) C1{ Fs:9 Fs:9 Fi:9}



static void Test_BFu9s_BFs9s_BFs9i()
{
  {
    init_simple_test("BFu9s_BFs9s_BFs9i");
    static STRUCT_IF_C BFu9s_BFs9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFs9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFs9i, BFu9s_BFs9s_BFs9i)
//============================================================================


struct  BFu9s_BFs9s_BFs9i_BFs9i  {
  unsigned short v1:9;
  signed short v2:9;
  signed int v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFs9s_BFs9i_BFs9i) C1{ Fs:9 Fs:9 Fi:9 Fi:9}



static void Test_BFu9s_BFs9s_BFs9i_BFs9i()
{
  {
    init_simple_test("BFu9s_BFs9s_BFs9i_BFs9i");
    static STRUCT_IF_C BFu9s_BFs9s_BFs9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFs9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFs9s_BFs9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFs9i_BFs9i, BFu9s_BFs9s_BFs9i_BFs9i)
//============================================================================


struct  BFu9s_BFs9s_BFs9i_BFs9ll  {
  unsigned short v1:9;
  signed short v2:9;
  signed int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFs9s_BFs9i_BFs9ll) C1{ Fs:9 Fs:9 Fi:9 FL:9}



static void Test_BFu9s_BFs9s_BFs9i_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFs9s_BFs9i_BFs9ll");
    static STRUCT_IF_C BFu9s_BFs9s_BFs9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFs9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9s_BFs9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFs9i_BFs9ll, BFu9s_BFs9s_BFs9i_BFs9ll)
//============================================================================


struct  BFu9s_BFs9s_BFs9i_BFs9s  {
  unsigned short v1:9;
  signed short v2:9;
  signed int v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFs9s_BFs9i_BFs9s) C1{ Fs:9 Fs:9 Fi:9 Fs:9}



static void Test_BFu9s_BFs9s_BFs9i_BFs9s()
{
  {
    init_simple_test("BFu9s_BFs9s_BFs9i_BFs9s");
    static STRUCT_IF_C BFu9s_BFs9s_BFs9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFs9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFs9s_BFs9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFu9s_BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFs9i_BFs9s, BFu9s_BFs9s_BFs9i_BFs9s)
//============================================================================


struct  BFu9s_BFs9s_BFs9i_BFu9i  {
  unsigned short v1:9;
  signed short v2:9;
  signed int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFs9s_BFs9i_BFu9i) C1{ Fs:9 Fs:9 Fi:9 Fi:9}



static void Test_BFu9s_BFs9s_BFs9i_BFu9i()
{
  {
    init_simple_test("BFu9s_BFs9s_BFs9i_BFu9i");
    static STRUCT_IF_C BFu9s_BFs9s_BFs9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFs9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFs9s_BFs9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFs9i_BFu9i, BFu9s_BFs9s_BFs9i_BFu9i)
//============================================================================


struct  BFu9s_BFs9s_BFs9i_BFu9ll  {
  unsigned short v1:9;
  signed short v2:9;
  signed int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFs9s_BFs9i_BFu9ll) C1{ Fs:9 Fs:9 Fi:9 FL:9}



static void Test_BFu9s_BFs9s_BFs9i_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFs9s_BFs9i_BFu9ll");
    static STRUCT_IF_C BFu9s_BFs9s_BFs9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFs9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9s_BFs9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFs9i_BFu9ll, BFu9s_BFs9s_BFs9i_BFu9ll)
//============================================================================


struct  BFu9s_BFs9s_BFs9i_BFu9s  {
  unsigned short v1:9;
  signed short v2:9;
  signed int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFs9s_BFs9i_BFu9s) C1{ Fs:9 Fs:9 Fi:9 Fs:9}



static void Test_BFu9s_BFs9s_BFs9i_BFu9s()
{
  {
    init_simple_test("BFu9s_BFs9s_BFs9i_BFu9s");
    static STRUCT_IF_C BFu9s_BFs9s_BFs9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFs9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFs9s_BFs9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFu9s_BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFs9i_BFu9s, BFu9s_BFs9s_BFs9i_BFu9s)
//============================================================================


struct  BFu9s_BFs9s_BFs9ll  {
  unsigned short v1:9;
  signed short v2:9;
  signed __tsi64 v3:9;
};
//SIG(1 BFu9s_BFs9s_BFs9ll) C1{ Fs:9 Fs:9 FL:9}



static void Test_BFu9s_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFs9s_BFs9ll");
    static STRUCT_IF_C BFu9s_BFs9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFs9ll, BFu9s_BFs9s_BFs9ll)
//============================================================================


struct  BFu9s_BFs9s_BFs9ll_BFs9i  {
  unsigned short v1:9;
  signed short v2:9;
  signed __tsi64 v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFs9s_BFs9ll_BFs9i) C1{ Fs:9 Fs:9 FL:9 Fi:9}



static void Test_BFu9s_BFs9s_BFs9ll_BFs9i()
{
  {
    init_simple_test("BFu9s_BFs9s_BFs9ll_BFs9i");
    static STRUCT_IF_C BFu9s_BFs9s_BFs9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFs9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9s_BFs9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFu9s_BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFs9ll_BFs9i, BFu9s_BFs9s_BFs9ll_BFs9i)
//============================================================================


struct  BFu9s_BFs9s_BFs9ll_BFs9ll  {
  unsigned short v1:9;
  signed short v2:9;
  signed __tsi64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFs9s_BFs9ll_BFs9ll) C1{ Fs:9 Fs:9 FL:9 FL:9}



static void Test_BFu9s_BFs9s_BFs9ll_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFs9s_BFs9ll_BFs9ll");
    static STRUCT_IF_C BFu9s_BFs9s_BFs9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFs9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9s_BFs9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFu9s_BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFs9ll_BFs9ll, BFu9s_BFs9s_BFs9ll_BFs9ll)
//============================================================================


struct  BFu9s_BFs9s_BFs9ll_BFs9s  {
  unsigned short v1:9;
  signed short v2:9;
  signed __tsi64 v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFs9s_BFs9ll_BFs9s) C1{ Fs:9 Fs:9 FL:9 Fs:9}



static void Test_BFu9s_BFs9s_BFs9ll_BFs9s()
{
  {
    init_simple_test("BFu9s_BFs9s_BFs9ll_BFs9s");
    static STRUCT_IF_C BFu9s_BFs9s_BFs9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFs9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9s_BFs9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFu9s_BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFs9ll_BFs9s, BFu9s_BFs9s_BFs9ll_BFs9s)
//============================================================================


struct  BFu9s_BFs9s_BFs9ll_BFu9i  {
  unsigned short v1:9;
  signed short v2:9;
  signed __tsi64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFs9s_BFs9ll_BFu9i) C1{ Fs:9 Fs:9 FL:9 Fi:9}



static void Test_BFu9s_BFs9s_BFs9ll_BFu9i()
{
  {
    init_simple_test("BFu9s_BFs9s_BFs9ll_BFu9i");
    static STRUCT_IF_C BFu9s_BFs9s_BFs9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFs9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9s_BFs9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFu9s_BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFs9ll_BFu9i, BFu9s_BFs9s_BFs9ll_BFu9i)
//============================================================================


struct  BFu9s_BFs9s_BFs9ll_BFu9ll  {
  unsigned short v1:9;
  signed short v2:9;
  signed __tsi64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFs9s_BFs9ll_BFu9ll) C1{ Fs:9 Fs:9 FL:9 FL:9}



static void Test_BFu9s_BFs9s_BFs9ll_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFs9s_BFs9ll_BFu9ll");
    static STRUCT_IF_C BFu9s_BFs9s_BFs9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFs9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9s_BFs9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFu9s_BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFs9ll_BFu9ll, BFu9s_BFs9s_BFs9ll_BFu9ll)
//============================================================================


struct  BFu9s_BFs9s_BFs9ll_BFu9s  {
  unsigned short v1:9;
  signed short v2:9;
  signed __tsi64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFs9s_BFs9ll_BFu9s) C1{ Fs:9 Fs:9 FL:9 Fs:9}



static void Test_BFu9s_BFs9s_BFs9ll_BFu9s()
{
  {
    init_simple_test("BFu9s_BFs9s_BFs9ll_BFu9s");
    static STRUCT_IF_C BFu9s_BFs9s_BFs9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFs9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9s_BFs9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFu9s_BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFs9ll_BFu9s, BFu9s_BFs9s_BFs9ll_BFu9s)
//============================================================================


struct  BFu9s_BFs9s_BFs9s  {
  unsigned short v1:9;
  signed short v2:9;
  signed short v3:9;
};
//SIG(1 BFu9s_BFs9s_BFs9s) C1{ Fs:9 Fs:9 Fs:9}



static void Test_BFu9s_BFs9s_BFs9s()
{
  {
    init_simple_test("BFu9s_BFs9s_BFs9s");
    static STRUCT_IF_C BFu9s_BFs9s_BFs9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFs9s_BFs9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFs9s, BFu9s_BFs9s_BFs9s)
//============================================================================


struct  BFu9s_BFs9s_BFs9s_BFs9i  {
  unsigned short v1:9;
  signed short v2:9;
  signed short v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFs9s_BFs9s_BFs9i) C1{ Fs:9 Fs:9 Fs:9 Fi:9}



static void Test_BFu9s_BFs9s_BFs9s_BFs9i()
{
  {
    init_simple_test("BFu9s_BFs9s_BFs9s_BFs9i");
    static STRUCT_IF_C BFu9s_BFs9s_BFs9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFs9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFs9s_BFs9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFs9s_BFs9i, BFu9s_BFs9s_BFs9s_BFs9i)
//============================================================================


struct  BFu9s_BFs9s_BFs9s_BFs9ll  {
  unsigned short v1:9;
  signed short v2:9;
  signed short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFs9s_BFs9s_BFs9ll) C1{ Fs:9 Fs:9 Fs:9 FL:9}



static void Test_BFu9s_BFs9s_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFs9s_BFs9s_BFs9ll");
    static STRUCT_IF_C BFu9s_BFs9s_BFs9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9s_BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFs9s_BFs9ll, BFu9s_BFs9s_BFs9s_BFs9ll)
//============================================================================


struct  BFu9s_BFs9s_BFs9s_BFs9s  {
  unsigned short v1:9;
  signed short v2:9;
  signed short v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFs9s_BFs9s_BFs9s) C1{ Fs:9 Fs:9 Fs:9 Fs:9}



static void Test_BFu9s_BFs9s_BFs9s_BFs9s()
{
  {
    init_simple_test("BFu9s_BFs9s_BFs9s_BFs9s");
    static STRUCT_IF_C BFu9s_BFs9s_BFs9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFs9s_BFs9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFs9s_BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFu9s_BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFs9s_BFs9s, BFu9s_BFs9s_BFs9s_BFs9s)
//============================================================================


struct  BFu9s_BFs9s_BFs9s_BFu9i  {
  unsigned short v1:9;
  signed short v2:9;
  signed short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFs9s_BFs9s_BFu9i) C1{ Fs:9 Fs:9 Fs:9 Fi:9}



static void Test_BFu9s_BFs9s_BFs9s_BFu9i()
{
  {
    init_simple_test("BFu9s_BFs9s_BFs9s_BFu9i");
    static STRUCT_IF_C BFu9s_BFs9s_BFs9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFs9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFs9s_BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFs9s_BFu9i, BFu9s_BFs9s_BFs9s_BFu9i)
//============================================================================


struct  BFu9s_BFs9s_BFs9s_BFu9ll  {
  unsigned short v1:9;
  signed short v2:9;
  signed short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFs9s_BFs9s_BFu9ll) C1{ Fs:9 Fs:9 Fs:9 FL:9}



static void Test_BFu9s_BFs9s_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFs9s_BFs9s_BFu9ll");
    static STRUCT_IF_C BFu9s_BFs9s_BFs9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9s_BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFs9s_BFu9ll, BFu9s_BFs9s_BFs9s_BFu9ll)
//============================================================================


struct  BFu9s_BFs9s_BFs9s_BFu9s  {
  unsigned short v1:9;
  signed short v2:9;
  signed short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFs9s_BFs9s_BFu9s) C1{ Fs:9 Fs:9 Fs:9 Fs:9}



static void Test_BFu9s_BFs9s_BFs9s_BFu9s()
{
  {
    init_simple_test("BFu9s_BFs9s_BFs9s_BFu9s");
    static STRUCT_IF_C BFu9s_BFs9s_BFs9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFs9s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFs9s_BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFu9s_BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFs9s_BFu9s, BFu9s_BFs9s_BFs9s_BFu9s)
//============================================================================


struct  BFu9s_BFs9s_BFu9i  {
  unsigned short v1:9;
  signed short v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFs9s_BFu9i) C1{ Fs:9 Fs:9 Fi:9}



static void Test_BFu9s_BFs9s_BFu9i()
{
  {
    init_simple_test("BFu9s_BFs9s_BFu9i");
    static STRUCT_IF_C BFu9s_BFs9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFu9i, BFu9s_BFs9s_BFu9i)
//============================================================================


struct  BFu9s_BFs9s_BFu9i_BFs9i  {
  unsigned short v1:9;
  signed short v2:9;
  unsigned int v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFs9s_BFu9i_BFs9i) C1{ Fs:9 Fs:9 Fi:9 Fi:9}



static void Test_BFu9s_BFs9s_BFu9i_BFs9i()
{
  {
    init_simple_test("BFu9s_BFs9s_BFu9i_BFs9i");
    static STRUCT_IF_C BFu9s_BFs9s_BFu9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFu9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFs9s_BFu9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFu9i_BFs9i, BFu9s_BFs9s_BFu9i_BFs9i)
//============================================================================


struct  BFu9s_BFs9s_BFu9i_BFs9ll  {
  unsigned short v1:9;
  signed short v2:9;
  unsigned int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFs9s_BFu9i_BFs9ll) C1{ Fs:9 Fs:9 Fi:9 FL:9}



static void Test_BFu9s_BFs9s_BFu9i_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFs9s_BFu9i_BFs9ll");
    static STRUCT_IF_C BFu9s_BFs9s_BFu9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFu9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9s_BFu9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFu9i_BFs9ll, BFu9s_BFs9s_BFu9i_BFs9ll)
//============================================================================


struct  BFu9s_BFs9s_BFu9i_BFs9s  {
  unsigned short v1:9;
  signed short v2:9;
  unsigned int v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFs9s_BFu9i_BFs9s) C1{ Fs:9 Fs:9 Fi:9 Fs:9}



static void Test_BFu9s_BFs9s_BFu9i_BFs9s()
{
  {
    init_simple_test("BFu9s_BFs9s_BFu9i_BFs9s");
    static STRUCT_IF_C BFu9s_BFs9s_BFu9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFu9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFs9s_BFu9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFu9s_BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFu9i_BFs9s, BFu9s_BFs9s_BFu9i_BFs9s)
//============================================================================


struct  BFu9s_BFs9s_BFu9i_BFu9i  {
  unsigned short v1:9;
  signed short v2:9;
  unsigned int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFs9s_BFu9i_BFu9i) C1{ Fs:9 Fs:9 Fi:9 Fi:9}



static void Test_BFu9s_BFs9s_BFu9i_BFu9i()
{
  {
    init_simple_test("BFu9s_BFs9s_BFu9i_BFu9i");
    static STRUCT_IF_C BFu9s_BFs9s_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFu9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFs9s_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFu9i_BFu9i, BFu9s_BFs9s_BFu9i_BFu9i)
//============================================================================


struct  BFu9s_BFs9s_BFu9i_BFu9ll  {
  unsigned short v1:9;
  signed short v2:9;
  unsigned int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFs9s_BFu9i_BFu9ll) C1{ Fs:9 Fs:9 Fi:9 FL:9}



static void Test_BFu9s_BFs9s_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFs9s_BFu9i_BFu9ll");
    static STRUCT_IF_C BFu9s_BFs9s_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9s_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFu9i_BFu9ll, BFu9s_BFs9s_BFu9i_BFu9ll)
//============================================================================


struct  BFu9s_BFs9s_BFu9i_BFu9s  {
  unsigned short v1:9;
  signed short v2:9;
  unsigned int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFs9s_BFu9i_BFu9s) C1{ Fs:9 Fs:9 Fi:9 Fs:9}



static void Test_BFu9s_BFs9s_BFu9i_BFu9s()
{
  {
    init_simple_test("BFu9s_BFs9s_BFu9i_BFu9s");
    static STRUCT_IF_C BFu9s_BFs9s_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFu9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFs9s_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFu9s_BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFu9i_BFu9s, BFu9s_BFs9s_BFu9i_BFu9s)
//============================================================================


struct  BFu9s_BFs9s_BFu9ll  {
  unsigned short v1:9;
  signed short v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFs9s_BFu9ll) C1{ Fs:9 Fs:9 FL:9}



static void Test_BFu9s_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFs9s_BFu9ll");
    static STRUCT_IF_C BFu9s_BFs9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFu9ll, BFu9s_BFs9s_BFu9ll)
//============================================================================


struct  BFu9s_BFs9s_BFu9ll_BFs9i  {
  unsigned short v1:9;
  signed short v2:9;
  __tsu64 v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFs9s_BFu9ll_BFs9i) C1{ Fs:9 Fs:9 FL:9 Fi:9}



static void Test_BFu9s_BFs9s_BFu9ll_BFs9i()
{
  {
    init_simple_test("BFu9s_BFs9s_BFu9ll_BFs9i");
    static STRUCT_IF_C BFu9s_BFs9s_BFu9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFu9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9s_BFu9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFu9s_BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFu9ll_BFs9i, BFu9s_BFs9s_BFu9ll_BFs9i)
//============================================================================


struct  BFu9s_BFs9s_BFu9ll_BFs9ll  {
  unsigned short v1:9;
  signed short v2:9;
  __tsu64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFs9s_BFu9ll_BFs9ll) C1{ Fs:9 Fs:9 FL:9 FL:9}



static void Test_BFu9s_BFs9s_BFu9ll_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFs9s_BFu9ll_BFs9ll");
    static STRUCT_IF_C BFu9s_BFs9s_BFu9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFu9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9s_BFu9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFu9s_BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFu9ll_BFs9ll, BFu9s_BFs9s_BFu9ll_BFs9ll)
//============================================================================


struct  BFu9s_BFs9s_BFu9ll_BFs9s  {
  unsigned short v1:9;
  signed short v2:9;
  __tsu64 v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFs9s_BFu9ll_BFs9s) C1{ Fs:9 Fs:9 FL:9 Fs:9}



static void Test_BFu9s_BFs9s_BFu9ll_BFs9s()
{
  {
    init_simple_test("BFu9s_BFs9s_BFu9ll_BFs9s");
    static STRUCT_IF_C BFu9s_BFs9s_BFu9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFu9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9s_BFu9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFu9s_BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFu9ll_BFs9s, BFu9s_BFs9s_BFu9ll_BFs9s)
//============================================================================


struct  BFu9s_BFs9s_BFu9ll_BFu9i  {
  unsigned short v1:9;
  signed short v2:9;
  __tsu64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFs9s_BFu9ll_BFu9i) C1{ Fs:9 Fs:9 FL:9 Fi:9}



static void Test_BFu9s_BFs9s_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFu9s_BFs9s_BFu9ll_BFu9i");
    static STRUCT_IF_C BFu9s_BFs9s_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9s_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFu9s_BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFu9ll_BFu9i, BFu9s_BFs9s_BFu9ll_BFu9i)
//============================================================================


struct  BFu9s_BFs9s_BFu9ll_BFu9ll  {
  unsigned short v1:9;
  signed short v2:9;
  __tsu64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFs9s_BFu9ll_BFu9ll) C1{ Fs:9 Fs:9 FL:9 FL:9}



static void Test_BFu9s_BFs9s_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFs9s_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFu9s_BFs9s_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9s_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFu9s_BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFu9ll_BFu9ll, BFu9s_BFs9s_BFu9ll_BFu9ll)
//============================================================================


struct  BFu9s_BFs9s_BFu9ll_BFu9s  {
  unsigned short v1:9;
  signed short v2:9;
  __tsu64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFs9s_BFu9ll_BFu9s) C1{ Fs:9 Fs:9 FL:9 Fs:9}



static void Test_BFu9s_BFs9s_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFu9s_BFs9s_BFu9ll_BFu9s");
    static STRUCT_IF_C BFu9s_BFs9s_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9s_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFu9s_BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFu9ll_BFu9s, BFu9s_BFs9s_BFu9ll_BFu9s)
//============================================================================


struct  BFu9s_BFs9s_BFu9s  {
  unsigned short v1:9;
  signed short v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFs9s_BFu9s) C1{ Fs:9 Fs:9 Fs:9}



static void Test_BFu9s_BFs9s_BFu9s()
{
  {
    init_simple_test("BFu9s_BFs9s_BFu9s");
    static STRUCT_IF_C BFu9s_BFs9s_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFs9s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFu9s, BFu9s_BFs9s_BFu9s)
//============================================================================


struct  BFu9s_BFs9s_BFu9s_BFs9i  {
  unsigned short v1:9;
  signed short v2:9;
  unsigned short v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFs9s_BFu9s_BFs9i) C1{ Fs:9 Fs:9 Fs:9 Fi:9}



static void Test_BFu9s_BFs9s_BFu9s_BFs9i()
{
  {
    init_simple_test("BFu9s_BFs9s_BFu9s_BFs9i");
    static STRUCT_IF_C BFu9s_BFs9s_BFu9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFu9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFs9s_BFu9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFu9s_BFs9i, BFu9s_BFs9s_BFu9s_BFs9i)
//============================================================================


struct  BFu9s_BFs9s_BFu9s_BFs9ll  {
  unsigned short v1:9;
  signed short v2:9;
  unsigned short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFs9s_BFu9s_BFs9ll) C1{ Fs:9 Fs:9 Fs:9 FL:9}



static void Test_BFu9s_BFs9s_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFs9s_BFu9s_BFs9ll");
    static STRUCT_IF_C BFu9s_BFs9s_BFu9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9s_BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFu9s_BFs9ll, BFu9s_BFs9s_BFu9s_BFs9ll)
//============================================================================


struct  BFu9s_BFs9s_BFu9s_BFs9s  {
  unsigned short v1:9;
  signed short v2:9;
  unsigned short v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFs9s_BFu9s_BFs9s) C1{ Fs:9 Fs:9 Fs:9 Fs:9}



static void Test_BFu9s_BFs9s_BFu9s_BFs9s()
{
  {
    init_simple_test("BFu9s_BFs9s_BFu9s_BFs9s");
    static STRUCT_IF_C BFu9s_BFs9s_BFu9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFu9s_BFs9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFs9s_BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFu9s_BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFu9s_BFs9s, BFu9s_BFs9s_BFu9s_BFs9s)
//============================================================================


struct  BFu9s_BFs9s_BFu9s_BFu9i  {
  unsigned short v1:9;
  signed short v2:9;
  unsigned short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFs9s_BFu9s_BFu9i) C1{ Fs:9 Fs:9 Fs:9 Fi:9}



static void Test_BFu9s_BFs9s_BFu9s_BFu9i()
{
  {
    init_simple_test("BFu9s_BFs9s_BFu9s_BFu9i");
    static STRUCT_IF_C BFu9s_BFs9s_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFu9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFs9s_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFu9s_BFu9i, BFu9s_BFs9s_BFu9s_BFu9i)
//============================================================================


struct  BFu9s_BFs9s_BFu9s_BFu9ll  {
  unsigned short v1:9;
  signed short v2:9;
  unsigned short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFs9s_BFu9s_BFu9ll) C1{ Fs:9 Fs:9 Fs:9 FL:9}



static void Test_BFu9s_BFs9s_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFs9s_BFu9s_BFu9ll");
    static STRUCT_IF_C BFu9s_BFs9s_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFs9s_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFu9s_BFu9ll, BFu9s_BFs9s_BFu9s_BFu9ll)
//============================================================================


struct  BFu9s_BFs9s_BFu9s_BFu9s  {
  unsigned short v1:9;
  signed short v2:9;
  unsigned short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFs9s_BFu9s_BFu9s) C1{ Fs:9 Fs:9 Fs:9 Fs:9}



static void Test_BFu9s_BFs9s_BFu9s_BFu9s()
{
  {
    init_simple_test("BFu9s_BFs9s_BFu9s_BFu9s");
    static STRUCT_IF_C BFu9s_BFs9s_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFs9s_BFu9s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFs9s_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFu9s_BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFu9s_BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFu9s_BFs9s_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFs9s_BFu9s_BFu9s, BFu9s_BFs9s_BFu9s_BFu9s)
//============================================================================


struct  BFu9s_BFu15i  {
  unsigned short v1:9;
  unsigned int v2:15;
};
//SIG(1 BFu9s_BFu15i) C1{ Fs:9 Fi:15}



static void Test_BFu9s_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu15i");
    static STRUCT_IF_C BFu9s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i, BFu9s_BFu15i)
//============================================================================


struct  BFu9s_BFu15i_BFu15i  {
  unsigned short v1:9;
  unsigned int v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu9s_BFu15i_BFu15i) C1{ Fs:9 Fi:15 Fi:15}



static void Test_BFu9s_BFu15i_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu15i");
    static STRUCT_IF_C BFu9s_BFu15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu15i, BFu9s_BFu15i_BFu15i)
//============================================================================


struct  BFu9s_BFu15i_BFu15ll  {
  unsigned short v1:9;
  unsigned int v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_BFu15i_BFu15ll) C1{ Fs:9 Fi:15 FL:15}



static void Test_BFu9s_BFu15i_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu9s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu15ll, BFu9s_BFu15i_BFu15ll)
//============================================================================


struct  BFu9s_BFu15i_BFu15s  {
  unsigned short v1:9;
  unsigned int v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu9s_BFu15i_BFu15s) C1{ Fs:9 Fi:15 Fs:15}



static void Test_BFu9s_BFu15i_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu15s");
    static STRUCT_IF_C BFu9s_BFu15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu15s, BFu9s_BFu15i_BFu15s)
//============================================================================


struct  BFu9s_BFu15i_BFu16i  {
  unsigned short v1:9;
  unsigned int v2:15;
  unsigned int v3:16;
};
//SIG(1 BFu9s_BFu15i_BFu16i) C1{ Fs:9 Fi:15 Fi:16}



static void Test_BFu9s_BFu15i_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu16i");
    static STRUCT_IF_C BFu9s_BFu15i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu15i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu16i, BFu9s_BFu15i_BFu16i)
//============================================================================


struct  BFu9s_BFu15i_BFu16ll  {
  unsigned short v1:9;
  unsigned int v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_BFu15i_BFu16ll) C1{ Fs:9 Fi:15 FL:16}



static void Test_BFu9s_BFu15i_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu15i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu9s_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu15i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu16ll, BFu9s_BFu15i_BFu16ll)
//============================================================================


struct  BFu9s_BFu15i_BFu16s  {
  unsigned short v1:9;
  unsigned int v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu9s_BFu15i_BFu16s) C1{ Fs:9 Fi:15 Fs:16}



static void Test_BFu9s_BFu15i_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu16s");
    static STRUCT_IF_C BFu9s_BFu15i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu15i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu16s, BFu9s_BFu15i_BFu16s)
//============================================================================


struct  BFu9s_BFu15i_BFu17i  {
  unsigned short v1:9;
  unsigned int v2:15;
  unsigned int v3:17;
};
//SIG(1 BFu9s_BFu15i_BFu17i) C1{ Fs:9 Fi:15 Fi:17}



static void Test_BFu9s_BFu15i_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu17i");
    static STRUCT_IF_C BFu9s_BFu15i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu9s_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu15i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu17i, BFu9s_BFu15i_BFu17i)
//============================================================================


struct  BFu9s_BFu15i_BFu17ll  {
  unsigned short v1:9;
  unsigned int v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_BFu15i_BFu17ll) C1{ Fs:9 Fi:15 FL:17}



static void Test_BFu9s_BFu15i_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu15i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu9s_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu15i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu17ll, BFu9s_BFu15i_BFu17ll)
//============================================================================


struct  BFu9s_BFu15i_BFu1c  {
  unsigned short v1:9;
  unsigned int v2:15;
  unsigned char v3:1;
};
//SIG(1 BFu9s_BFu15i_BFu1c) C1{ Fs:9 Fi:15 Fc:1}



static void Test_BFu9s_BFu15i_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu1c");
    static STRUCT_IF_C BFu9s_BFu15i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu15i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu9s_BFu15i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu1c, BFu9s_BFu15i_BFu1c)
//============================================================================


struct  BFu9s_BFu15i_BFu1i  {
  unsigned short v1:9;
  unsigned int v2:15;
  unsigned int v3:1;
};
//SIG(1 BFu9s_BFu15i_BFu1i) C1{ Fs:9 Fi:15 Fi:1}



static void Test_BFu9s_BFu15i_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu1i");
    static STRUCT_IF_C BFu9s_BFu15i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu15i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu9s_BFu15i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu1i, BFu9s_BFu15i_BFu1i)
//============================================================================


struct  BFu9s_BFu15i_BFu1ll  {
  unsigned short v1:9;
  unsigned int v2:15;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_BFu15i_BFu1ll) C1{ Fs:9 Fi:15 FL:1}



static void Test_BFu9s_BFu15i_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu15i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu15i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu9s_BFu15i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu1ll, BFu9s_BFu15i_BFu1ll)
//============================================================================


struct  BFu9s_BFu15i_BFu1s  {
  unsigned short v1:9;
  unsigned int v2:15;
  unsigned short v3:1;
};
//SIG(1 BFu9s_BFu15i_BFu1s) C1{ Fs:9 Fi:15 Fs:1}



static void Test_BFu9s_BFu15i_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu1s");
    static STRUCT_IF_C BFu9s_BFu15i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu15i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu9s_BFu15i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu1s, BFu9s_BFu15i_BFu1s)
//============================================================================


struct  BFu9s_BFu15i_BFu31i  {
  unsigned short v1:9;
  unsigned int v2:15;
  unsigned int v3:31;
};
//SIG(1 BFu9s_BFu15i_BFu31i) C1{ Fs:9 Fi:15 Fi:31}



static void Test_BFu9s_BFu15i_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu31i");
    static STRUCT_IF_C BFu9s_BFu15i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu15i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu31i, BFu9s_BFu15i_BFu31i)
//============================================================================


struct  BFu9s_BFu15i_BFu31ll  {
  unsigned short v1:9;
  unsigned int v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_BFu15i_BFu31ll) C1{ Fs:9 Fi:15 FL:31}



static void Test_BFu9s_BFu15i_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu15i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu9s_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu15i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu31ll, BFu9s_BFu15i_BFu31ll)
//============================================================================


struct  BFu9s_BFu15i_BFu32i  {
  unsigned short v1:9;
  unsigned int v2:15;
  unsigned int v3:32;
};
//SIG(1 BFu9s_BFu15i_BFu32i) C1{ Fs:9 Fi:15 Fi:32}



static void Test_BFu9s_BFu15i_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu32i");
    static STRUCT_IF_C BFu9s_BFu15i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu15i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu32i, BFu9s_BFu15i_BFu32i)
//============================================================================


struct  BFu9s_BFu15i_BFu32ll  {
  unsigned short v1:9;
  unsigned int v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_BFu15i_BFu32ll) C1{ Fs:9 Fi:15 FL:32}



static void Test_BFu9s_BFu15i_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu15i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu9s_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu15i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu32ll, BFu9s_BFu15i_BFu32ll)
//============================================================================


struct  BFu9s_BFu15i_BFu33  {
  unsigned short v1:9;
  unsigned int v2:15;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_BFu15i_BFu33) C1{ Fs:9 Fi:15 FL:33}



static void Test_BFu9s_BFu15i_BFu33()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu33");
    static STRUCT_IF_C BFu9s_BFu15i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu9s_BFu15i_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu9s_BFu15i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu33, BFu9s_BFu15i_BFu33)
//============================================================================


struct  BFu9s_BFu15i_BFu7c  {
  unsigned short v1:9;
  unsigned int v2:15;
  unsigned char v3:7;
};
//SIG(1 BFu9s_BFu15i_BFu7c) C1{ Fs:9 Fi:15 Fc:7}



static void Test_BFu9s_BFu15i_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu7c");
    static STRUCT_IF_C BFu9s_BFu15i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu15i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu9s_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu15i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu7c, BFu9s_BFu15i_BFu7c)
//============================================================================


struct  BFu9s_BFu15i_BFu7i  {
  unsigned short v1:9;
  unsigned int v2:15;
  unsigned int v3:7;
};
//SIG(1 BFu9s_BFu15i_BFu7i) C1{ Fs:9 Fi:15 Fi:7}



static void Test_BFu9s_BFu15i_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu7i");
    static STRUCT_IF_C BFu9s_BFu15i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu15i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu9s_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu15i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu7i, BFu9s_BFu15i_BFu7i)
//============================================================================


struct  BFu9s_BFu15i_BFu7ll  {
  unsigned short v1:9;
  unsigned int v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_BFu15i_BFu7ll) C1{ Fs:9 Fi:15 FL:7}



static void Test_BFu9s_BFu15i_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu15i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu15i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu9s_BFu15i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu15i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu7ll, BFu9s_BFu15i_BFu7ll)
//============================================================================


struct  BFu9s_BFu15i_BFu7s  {
  unsigned short v1:9;
  unsigned int v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu9s_BFu15i_BFu7s) C1{ Fs:9 Fi:15 Fs:7}



static void Test_BFu9s_BFu15i_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu7s");
    static STRUCT_IF_C BFu9s_BFu15i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu15i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu9s_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu15i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu7s, BFu9s_BFu15i_BFu7s)
//============================================================================


struct  BFu9s_BFu15i_BFu8c  {
  unsigned short v1:9;
  unsigned int v2:15;
  unsigned char v3:8;
};
//SIG(1 BFu9s_BFu15i_BFu8c) C1{ Fs:9 Fi:15 Fc:8}



static void Test_BFu9s_BFu15i_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu8c");
    static STRUCT_IF_C BFu9s_BFu15i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu15i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu9s_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu15i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu8c, BFu9s_BFu15i_BFu8c)
//============================================================================


struct  BFu9s_BFu15i_BFu8i  {
  unsigned short v1:9;
  unsigned int v2:15;
  unsigned int v3:8;
};
//SIG(1 BFu9s_BFu15i_BFu8i) C1{ Fs:9 Fi:15 Fi:8}



static void Test_BFu9s_BFu15i_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu8i");
    static STRUCT_IF_C BFu9s_BFu15i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu15i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu9s_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu15i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu8i, BFu9s_BFu15i_BFu8i)
//============================================================================


struct  BFu9s_BFu15i_BFu8ll  {
  unsigned short v1:9;
  unsigned int v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_BFu15i_BFu8ll) C1{ Fs:9 Fi:15 FL:8}



static void Test_BFu9s_BFu15i_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu15i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu15i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu9s_BFu15i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu15i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu8ll, BFu9s_BFu15i_BFu8ll)
//============================================================================


struct  BFu9s_BFu15i_BFu8s  {
  unsigned short v1:9;
  unsigned int v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu9s_BFu15i_BFu8s) C1{ Fs:9 Fi:15 Fs:8}



static void Test_BFu9s_BFu15i_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu8s");
    static STRUCT_IF_C BFu9s_BFu15i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu15i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu9s_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu15i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu8s, BFu9s_BFu15i_BFu8s)
//============================================================================


struct  BFu9s_BFu15i_BFu9i  {
  unsigned short v1:9;
  unsigned int v2:15;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFu15i_BFu9i) C1{ Fs:9 Fi:15 Fi:9}



static void Test_BFu9s_BFu15i_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu9i");
    static STRUCT_IF_C BFu9s_BFu15i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu9i, BFu9s_BFu15i_BFu9i)
//============================================================================


struct  BFu9s_BFu15i_BFu9ll  {
  unsigned short v1:9;
  unsigned int v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFu15i_BFu9ll) C1{ Fs:9 Fi:15 FL:9}



static void Test_BFu9s_BFu15i_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu15i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu9s_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu9ll, BFu9s_BFu15i_BFu9ll)
//============================================================================


struct  BFu9s_BFu15i_BFu9s  {
  unsigned short v1:9;
  unsigned int v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFu15i_BFu9s) C1{ Fs:9 Fi:15 Fs:9}



static void Test_BFu9s_BFu15i_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu9s");
    static STRUCT_IF_C BFu9s_BFu15i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu9s, BFu9s_BFu15i_BFu9s)
//============================================================================


struct  BFu9s_BFu15i_C  {
  unsigned short v1:9;
  unsigned int v2:15;
  char v3;
};
//SIG(1 BFu9s_BFu15i_C) C1{ Fs:9 Fi:15 Fc}



static void Test_BFu9s_BFu15i_C()
{
  {
    init_simple_test("BFu9s_BFu15i_C");
    static STRUCT_IF_C BFu9s_BFu15i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu15i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_C");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_C");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_C");
    check_field_offset(lv, v3, 3, "BFu9s_BFu15i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_C, BFu9s_BFu15i_C)
//============================================================================


struct  BFu9s_BFu15i_D  {
  unsigned short v1:9;
  unsigned int v2:15;
  double v3;
};
//SIG(1 BFu9s_BFu15i_D) C1{ Fs:9 Fi:15 FL}



static void Test_BFu9s_BFu15i_D()
{
  {
    init_simple_test("BFu9s_BFu15i_D");
    static STRUCT_IF_C BFu9s_BFu15i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu15i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15i_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_D");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_D");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu15i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_D, BFu9s_BFu15i_D)
//============================================================================


struct  BFu9s_BFu15i_F  {
  unsigned short v1:9;
  unsigned int v2:15;
  float v3;
};
//SIG(1 BFu9s_BFu15i_F) C1{ Fs:9 Fi:15 Fi}



static void Test_BFu9s_BFu15i_F()
{
  {
    init_simple_test("BFu9s_BFu15i_F");
    static STRUCT_IF_C BFu9s_BFu15i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_F");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_F");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_F");
    check_field_offset(lv, v3, 4, "BFu9s_BFu15i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_F, BFu9s_BFu15i_F)
//============================================================================


struct  BFu9s_BFu15i_I  {
  unsigned short v1:9;
  unsigned int v2:15;
  int v3;
};
//SIG(1 BFu9s_BFu15i_I) C1{ Fs:9 Fi:15 Fi}



static void Test_BFu9s_BFu15i_I()
{
  {
    init_simple_test("BFu9s_BFu15i_I");
    static STRUCT_IF_C BFu9s_BFu15i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_I");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_I");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_I");
    check_field_offset(lv, v3, 4, "BFu9s_BFu15i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_I, BFu9s_BFu15i_I)
//============================================================================


struct  BFu9s_BFu15i_Ip  {
  unsigned short v1:9;
  unsigned int v2:15;
  int *v3;
};
//SIG(1 BFu9s_BFu15i_Ip) C1{ Fs:9 Fi:15 Fp}



static void Test_BFu9s_BFu15i_Ip()
{
  {
    init_simple_test("BFu9s_BFu15i_Ip");
    static STRUCT_IF_C BFu9s_BFu15i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu15i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_Ip");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_Ip");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu15i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_Ip, BFu9s_BFu15i_Ip)
//============================================================================


struct  BFu9s_BFu15i_L  {
  unsigned short v1:9;
  unsigned int v2:15;
  __tsi64 v3;
};
//SIG(1 BFu9s_BFu15i_L) C1{ Fs:9 Fi:15 FL}



static void Test_BFu9s_BFu15i_L()
{
  {
    init_simple_test("BFu9s_BFu15i_L");
    static STRUCT_IF_C BFu9s_BFu15i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu15i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15i_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_L");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_L");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu15i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_L, BFu9s_BFu15i_L)
//============================================================================


struct  BFu9s_BFu15i_S  {
  unsigned short v1:9;
  unsigned int v2:15;
  short v3;
};
//SIG(1 BFu9s_BFu15i_S) C1{ Fs:9 Fi:15 Fs}



static void Test_BFu9s_BFu15i_S()
{
  {
    init_simple_test("BFu9s_BFu15i_S");
    static STRUCT_IF_C BFu9s_BFu15i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_S");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_S");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_S");
    check_field_offset(lv, v3, 4, "BFu9s_BFu15i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_S, BFu9s_BFu15i_S)
//============================================================================


struct  BFu9s_BFu15i_Uc  {
  unsigned short v1:9;
  unsigned int v2:15;
  unsigned char v3;
};
//SIG(1 BFu9s_BFu15i_Uc) C1{ Fs:9 Fi:15 Fc}



static void Test_BFu9s_BFu15i_Uc()
{
  {
    init_simple_test("BFu9s_BFu15i_Uc");
    static STRUCT_IF_C BFu9s_BFu15i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu15i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_Uc");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_Uc");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_Uc");
    check_field_offset(lv, v3, 3, "BFu9s_BFu15i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_Uc, BFu9s_BFu15i_Uc)
//============================================================================


struct  BFu9s_BFu15i_Ui  {
  unsigned short v1:9;
  unsigned int v2:15;
  unsigned int v3;
};
//SIG(1 BFu9s_BFu15i_Ui) C1{ Fs:9 Fi:15 Fi}



static void Test_BFu9s_BFu15i_Ui()
{
  {
    init_simple_test("BFu9s_BFu15i_Ui");
    static STRUCT_IF_C BFu9s_BFu15i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_Ui");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_Ui");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_Ui");
    check_field_offset(lv, v3, 4, "BFu9s_BFu15i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_Ui, BFu9s_BFu15i_Ui)
//============================================================================


struct  BFu9s_BFu15i_Ul  {
  unsigned short v1:9;
  unsigned int v2:15;
  __tsu64 v3;
};
//SIG(1 BFu9s_BFu15i_Ul) C1{ Fs:9 Fi:15 FL}



static void Test_BFu9s_BFu15i_Ul()
{
  {
    init_simple_test("BFu9s_BFu15i_Ul");
    static STRUCT_IF_C BFu9s_BFu15i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu15i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_Ul");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_Ul");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu15i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_Ul, BFu9s_BFu15i_Ul)
//============================================================================


struct  BFu9s_BFu15i_Us  {
  unsigned short v1:9;
  unsigned int v2:15;
  unsigned short v3;
};
//SIG(1 BFu9s_BFu15i_Us) C1{ Fs:9 Fi:15 Fs}



static void Test_BFu9s_BFu15i_Us()
{
  {
    init_simple_test("BFu9s_BFu15i_Us");
    static STRUCT_IF_C BFu9s_BFu15i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_Us");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_Us");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_Us");
    check_field_offset(lv, v3, 4, "BFu9s_BFu15i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_Us, BFu9s_BFu15i_Us)
//============================================================================


struct  BFu9s_BFu15i_Vp  {
  unsigned short v1:9;
  unsigned int v2:15;
  void *v3;
};
//SIG(1 BFu9s_BFu15i_Vp) C1{ Fs:9 Fi:15 Fp}



static void Test_BFu9s_BFu15i_Vp()
{
  {
    init_simple_test("BFu9s_BFu15i_Vp");
    static STRUCT_IF_C BFu9s_BFu15i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu15i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_Vp");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_Vp");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu15i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_Vp, BFu9s_BFu15i_Vp)
//============================================================================


struct  BFu9s_BFu15ll  {
  unsigned short v1:9;
  __tsu64 v2:15;
};
//SIG(1 BFu9s_BFu15ll) C1{ Fs:9 FL:15}



static void Test_BFu9s_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll, BFu9s_BFu15ll)
//============================================================================


struct  BFu9s_BFu15ll_BFu15i  {
  unsigned short v1:9;
  __tsu64 v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu9s_BFu15ll_BFu15i) C1{ Fs:9 FL:15 Fi:15}



static void Test_BFu9s_BFu15ll_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu15i");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu15i, BFu9s_BFu15ll_BFu15i)
//============================================================================


struct  BFu9s_BFu15ll_BFu15ll  {
  unsigned short v1:9;
  __tsu64 v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_BFu15ll_BFu15ll) C1{ Fs:9 FL:15 FL:15}



static void Test_BFu9s_BFu15ll_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu9s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu15ll, BFu9s_BFu15ll_BFu15ll)
//============================================================================


struct  BFu9s_BFu15ll_BFu15s  {
  unsigned short v1:9;
  __tsu64 v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu9s_BFu15ll_BFu15s) C1{ Fs:9 FL:15 Fs:15}



static void Test_BFu9s_BFu15ll_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu15s");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu15s, BFu9s_BFu15ll_BFu15s)
//============================================================================


struct  BFu9s_BFu15ll_BFu16i  {
  unsigned short v1:9;
  __tsu64 v2:15;
  unsigned int v3:16;
};
//SIG(1 BFu9s_BFu15ll_BFu16i) C1{ Fs:9 FL:15 Fi:16}



static void Test_BFu9s_BFu15ll_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu16i");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu15ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu15ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu16i, BFu9s_BFu15ll_BFu16i)
//============================================================================


struct  BFu9s_BFu15ll_BFu16ll  {
  unsigned short v1:9;
  __tsu64 v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_BFu15ll_BFu16ll) C1{ Fs:9 FL:15 FL:16}



static void Test_BFu9s_BFu15ll_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu9s_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu15ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu16ll, BFu9s_BFu15ll_BFu16ll)
//============================================================================


struct  BFu9s_BFu15ll_BFu16s  {
  unsigned short v1:9;
  __tsu64 v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu9s_BFu15ll_BFu16s) C1{ Fs:9 FL:15 Fs:16}



static void Test_BFu9s_BFu15ll_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu16s");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu15ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu15ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu16s, BFu9s_BFu15ll_BFu16s)
//============================================================================


struct  BFu9s_BFu15ll_BFu17i  {
  unsigned short v1:9;
  __tsu64 v2:15;
  unsigned int v3:17;
};
//SIG(1 BFu9s_BFu15ll_BFu17i) C1{ Fs:9 FL:15 Fi:17}



static void Test_BFu9s_BFu15ll_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu17i");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu9s_BFu15ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu15ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu17i, BFu9s_BFu15ll_BFu17i)
//============================================================================


struct  BFu9s_BFu15ll_BFu17ll  {
  unsigned short v1:9;
  __tsu64 v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_BFu15ll_BFu17ll) C1{ Fs:9 FL:15 FL:17}



static void Test_BFu9s_BFu15ll_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu9s_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu15ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu17ll, BFu9s_BFu15ll_BFu17ll)
//============================================================================


struct  BFu9s_BFu15ll_BFu1c  {
  unsigned short v1:9;
  __tsu64 v2:15;
  unsigned char v3:1;
};
//SIG(1 BFu9s_BFu15ll_BFu1c) C1{ Fs:9 FL:15 Fc:1}



static void Test_BFu9s_BFu15ll_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu1c");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu15ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu9s_BFu15ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu1c, BFu9s_BFu15ll_BFu1c)
//============================================================================


struct  BFu9s_BFu15ll_BFu1i  {
  unsigned short v1:9;
  __tsu64 v2:15;
  unsigned int v3:1;
};
//SIG(1 BFu9s_BFu15ll_BFu1i) C1{ Fs:9 FL:15 Fi:1}



static void Test_BFu9s_BFu15ll_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu1i");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu15ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu9s_BFu15ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu1i, BFu9s_BFu15ll_BFu1i)
//============================================================================


struct  BFu9s_BFu15ll_BFu1ll  {
  unsigned short v1:9;
  __tsu64 v2:15;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_BFu15ll_BFu1ll) C1{ Fs:9 FL:15 FL:1}



static void Test_BFu9s_BFu15ll_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu15ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu9s_BFu15ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu1ll, BFu9s_BFu15ll_BFu1ll)
//============================================================================


struct  BFu9s_BFu15ll_BFu1s  {
  unsigned short v1:9;
  __tsu64 v2:15;
  unsigned short v3:1;
};
//SIG(1 BFu9s_BFu15ll_BFu1s) C1{ Fs:9 FL:15 Fs:1}



static void Test_BFu9s_BFu15ll_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu1s");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu15ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu9s_BFu15ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu1s, BFu9s_BFu15ll_BFu1s)
//============================================================================


struct  BFu9s_BFu15ll_BFu31i  {
  unsigned short v1:9;
  __tsu64 v2:15;
  unsigned int v3:31;
};
//SIG(1 BFu9s_BFu15ll_BFu31i) C1{ Fs:9 FL:15 Fi:31}



static void Test_BFu9s_BFu15ll_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu31i");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_BFu15ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu15ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu31i, BFu9s_BFu15ll_BFu31i)
//============================================================================


struct  BFu9s_BFu15ll_BFu31ll  {
  unsigned short v1:9;
  __tsu64 v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_BFu15ll_BFu31ll) C1{ Fs:9 FL:15 FL:31}



static void Test_BFu9s_BFu15ll_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu9s_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu15ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu31ll, BFu9s_BFu15ll_BFu31ll)
//============================================================================


struct  BFu9s_BFu15ll_BFu32i  {
  unsigned short v1:9;
  __tsu64 v2:15;
  unsigned int v3:32;
};
//SIG(1 BFu9s_BFu15ll_BFu32i) C1{ Fs:9 FL:15 Fi:32}



static void Test_BFu9s_BFu15ll_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu32i");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_BFu15ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu15ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu32i, BFu9s_BFu15ll_BFu32i)
//============================================================================


struct  BFu9s_BFu15ll_BFu32ll  {
  unsigned short v1:9;
  __tsu64 v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_BFu15ll_BFu32ll) C1{ Fs:9 FL:15 FL:32}



static void Test_BFu9s_BFu15ll_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu9s_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu15ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu32ll, BFu9s_BFu15ll_BFu32ll)
//============================================================================


struct  BFu9s_BFu15ll_BFu33  {
  unsigned short v1:9;
  __tsu64 v2:15;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_BFu15ll_BFu33) C1{ Fs:9 FL:15 FL:33}



static void Test_BFu9s_BFu15ll_BFu33()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu33");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu9s_BFu15ll_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu9s_BFu15ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu33, BFu9s_BFu15ll_BFu33)
//============================================================================


struct  BFu9s_BFu15ll_BFu7c  {
  unsigned short v1:9;
  __tsu64 v2:15;
  unsigned char v3:7;
};
//SIG(1 BFu9s_BFu15ll_BFu7c) C1{ Fs:9 FL:15 Fc:7}



static void Test_BFu9s_BFu15ll_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu7c");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu15ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu9s_BFu15ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu15ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu7c, BFu9s_BFu15ll_BFu7c)
//============================================================================


struct  BFu9s_BFu15ll_BFu7i  {
  unsigned short v1:9;
  __tsu64 v2:15;
  unsigned int v3:7;
};
//SIG(1 BFu9s_BFu15ll_BFu7i) C1{ Fs:9 FL:15 Fi:7}



static void Test_BFu9s_BFu15ll_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu7i");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu15ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu9s_BFu15ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu15ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu7i, BFu9s_BFu15ll_BFu7i)
//============================================================================


struct  BFu9s_BFu15ll_BFu7ll  {
  unsigned short v1:9;
  __tsu64 v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_BFu15ll_BFu7ll) C1{ Fs:9 FL:15 FL:7}



static void Test_BFu9s_BFu15ll_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu15ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu9s_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu15ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu7ll, BFu9s_BFu15ll_BFu7ll)
//============================================================================


struct  BFu9s_BFu15ll_BFu7s  {
  unsigned short v1:9;
  __tsu64 v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu9s_BFu15ll_BFu7s) C1{ Fs:9 FL:15 Fs:7}



static void Test_BFu9s_BFu15ll_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu7s");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu15ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu9s_BFu15ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu15ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu7s, BFu9s_BFu15ll_BFu7s)
//============================================================================


struct  BFu9s_BFu15ll_BFu8c  {
  unsigned short v1:9;
  __tsu64 v2:15;
  unsigned char v3:8;
};
//SIG(1 BFu9s_BFu15ll_BFu8c) C1{ Fs:9 FL:15 Fc:8}



static void Test_BFu9s_BFu15ll_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu8c");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu15ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu9s_BFu15ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu15ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu8c, BFu9s_BFu15ll_BFu8c)
//============================================================================


struct  BFu9s_BFu15ll_BFu8i  {
  unsigned short v1:9;
  __tsu64 v2:15;
  unsigned int v3:8;
};
//SIG(1 BFu9s_BFu15ll_BFu8i) C1{ Fs:9 FL:15 Fi:8}



static void Test_BFu9s_BFu15ll_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu8i");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu15ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu9s_BFu15ll_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu15ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu8i, BFu9s_BFu15ll_BFu8i)
//============================================================================


struct  BFu9s_BFu15ll_BFu8ll  {
  unsigned short v1:9;
  __tsu64 v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_BFu15ll_BFu8ll) C1{ Fs:9 FL:15 FL:8}



static void Test_BFu9s_BFu15ll_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu15ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu9s_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu15ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu8ll, BFu9s_BFu15ll_BFu8ll)
//============================================================================


struct  BFu9s_BFu15ll_BFu8s  {
  unsigned short v1:9;
  __tsu64 v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu9s_BFu15ll_BFu8s) C1{ Fs:9 FL:15 Fs:8}



static void Test_BFu9s_BFu15ll_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu8s");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu15ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu9s_BFu15ll_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu15ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu8s, BFu9s_BFu15ll_BFu8s)
//============================================================================


struct  BFu9s_BFu15ll_BFu9i  {
  unsigned short v1:9;
  __tsu64 v2:15;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFu15ll_BFu9i) C1{ Fs:9 FL:15 Fi:9}



static void Test_BFu9s_BFu15ll_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu9i");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu15ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu9i, BFu9s_BFu15ll_BFu9i)
//============================================================================


struct  BFu9s_BFu15ll_BFu9ll  {
  unsigned short v1:9;
  __tsu64 v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFu15ll_BFu9ll) C1{ Fs:9 FL:15 FL:9}



static void Test_BFu9s_BFu15ll_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu9s_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu9ll, BFu9s_BFu15ll_BFu9ll)
//============================================================================


struct  BFu9s_BFu15ll_BFu9s  {
  unsigned short v1:9;
  __tsu64 v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFu15ll_BFu9s) C1{ Fs:9 FL:15 Fs:9}



static void Test_BFu9s_BFu15ll_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu9s");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu15ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu9s, BFu9s_BFu15ll_BFu9s)
//============================================================================


struct  BFu9s_BFu15ll_C  {
  unsigned short v1:9;
  __tsu64 v2:15;
  char v3;
};
//SIG(1 BFu9s_BFu15ll_C) C1{ Fs:9 FL:15 Fc}



static void Test_BFu9s_BFu15ll_C()
{
  {
    init_simple_test("BFu9s_BFu15ll_C");
    static STRUCT_IF_C BFu9s_BFu15ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu15ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_C");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_C");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_C");
    check_field_offset(lv, v3, 3, "BFu9s_BFu15ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_C, BFu9s_BFu15ll_C)
//============================================================================


struct  BFu9s_BFu15ll_D  {
  unsigned short v1:9;
  __tsu64 v2:15;
  double v3;
};
//SIG(1 BFu9s_BFu15ll_D) C1{ Fs:9 FL:15 FL}



static void Test_BFu9s_BFu15ll_D()
{
  {
    init_simple_test("BFu9s_BFu15ll_D");
    static STRUCT_IF_C BFu9s_BFu15ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu15ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_D");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_D");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu15ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_D, BFu9s_BFu15ll_D)
//============================================================================


struct  BFu9s_BFu15ll_F  {
  unsigned short v1:9;
  __tsu64 v2:15;
  float v3;
};
//SIG(1 BFu9s_BFu15ll_F) C1{ Fs:9 FL:15 Fi}



static void Test_BFu9s_BFu15ll_F()
{
  {
    init_simple_test("BFu9s_BFu15ll_F");
    static STRUCT_IF_C BFu9s_BFu15ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_F");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_F");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_F");
    check_field_offset(lv, v3, 4, "BFu9s_BFu15ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_F, BFu9s_BFu15ll_F)
//============================================================================


struct  BFu9s_BFu15ll_I  {
  unsigned short v1:9;
  __tsu64 v2:15;
  int v3;
};
//SIG(1 BFu9s_BFu15ll_I) C1{ Fs:9 FL:15 Fi}



static void Test_BFu9s_BFu15ll_I()
{
  {
    init_simple_test("BFu9s_BFu15ll_I");
    static STRUCT_IF_C BFu9s_BFu15ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_I");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_I");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_I");
    check_field_offset(lv, v3, 4, "BFu9s_BFu15ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_I, BFu9s_BFu15ll_I)
//============================================================================


struct  BFu9s_BFu15ll_Ip  {
  unsigned short v1:9;
  __tsu64 v2:15;
  int *v3;
};
//SIG(1 BFu9s_BFu15ll_Ip) C1{ Fs:9 FL:15 Fp}



static void Test_BFu9s_BFu15ll_Ip()
{
  {
    init_simple_test("BFu9s_BFu15ll_Ip");
    static STRUCT_IF_C BFu9s_BFu15ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu15ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_Ip");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_Ip");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu15ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_Ip, BFu9s_BFu15ll_Ip)
//============================================================================


struct  BFu9s_BFu15ll_L  {
  unsigned short v1:9;
  __tsu64 v2:15;
  __tsi64 v3;
};
//SIG(1 BFu9s_BFu15ll_L) C1{ Fs:9 FL:15 FL}



static void Test_BFu9s_BFu15ll_L()
{
  {
    init_simple_test("BFu9s_BFu15ll_L");
    static STRUCT_IF_C BFu9s_BFu15ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu15ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_L");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_L");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu15ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_L, BFu9s_BFu15ll_L)
//============================================================================


struct  BFu9s_BFu15ll_S  {
  unsigned short v1:9;
  __tsu64 v2:15;
  short v3;
};
//SIG(1 BFu9s_BFu15ll_S) C1{ Fs:9 FL:15 Fs}



static void Test_BFu9s_BFu15ll_S()
{
  {
    init_simple_test("BFu9s_BFu15ll_S");
    static STRUCT_IF_C BFu9s_BFu15ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_S");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_S");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_S");
    check_field_offset(lv, v3, 4, "BFu9s_BFu15ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_S, BFu9s_BFu15ll_S)
//============================================================================


struct  BFu9s_BFu15ll_Uc  {
  unsigned short v1:9;
  __tsu64 v2:15;
  unsigned char v3;
};
//SIG(1 BFu9s_BFu15ll_Uc) C1{ Fs:9 FL:15 Fc}



static void Test_BFu9s_BFu15ll_Uc()
{
  {
    init_simple_test("BFu9s_BFu15ll_Uc");
    static STRUCT_IF_C BFu9s_BFu15ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu15ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_Uc");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_Uc");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_Uc");
    check_field_offset(lv, v3, 3, "BFu9s_BFu15ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_Uc, BFu9s_BFu15ll_Uc)
//============================================================================


struct  BFu9s_BFu15ll_Ui  {
  unsigned short v1:9;
  __tsu64 v2:15;
  unsigned int v3;
};
//SIG(1 BFu9s_BFu15ll_Ui) C1{ Fs:9 FL:15 Fi}



static void Test_BFu9s_BFu15ll_Ui()
{
  {
    init_simple_test("BFu9s_BFu15ll_Ui");
    static STRUCT_IF_C BFu9s_BFu15ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_Ui");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_Ui");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_Ui");
    check_field_offset(lv, v3, 4, "BFu9s_BFu15ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_Ui, BFu9s_BFu15ll_Ui)
//============================================================================


struct  BFu9s_BFu15ll_Ul  {
  unsigned short v1:9;
  __tsu64 v2:15;
  __tsu64 v3;
};
//SIG(1 BFu9s_BFu15ll_Ul) C1{ Fs:9 FL:15 FL}



static void Test_BFu9s_BFu15ll_Ul()
{
  {
    init_simple_test("BFu9s_BFu15ll_Ul");
    static STRUCT_IF_C BFu9s_BFu15ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu15ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_Ul");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_Ul");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu15ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_Ul, BFu9s_BFu15ll_Ul)
//============================================================================


struct  BFu9s_BFu15ll_Us  {
  unsigned short v1:9;
  __tsu64 v2:15;
  unsigned short v3;
};
//SIG(1 BFu9s_BFu15ll_Us) C1{ Fs:9 FL:15 Fs}



static void Test_BFu9s_BFu15ll_Us()
{
  {
    init_simple_test("BFu9s_BFu15ll_Us");
    static STRUCT_IF_C BFu9s_BFu15ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_Us");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_Us");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_Us");
    check_field_offset(lv, v3, 4, "BFu9s_BFu15ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_Us, BFu9s_BFu15ll_Us)
//============================================================================


struct  BFu9s_BFu15ll_Vp  {
  unsigned short v1:9;
  __tsu64 v2:15;
  void *v3;
};
//SIG(1 BFu9s_BFu15ll_Vp) C1{ Fs:9 FL:15 Fp}



static void Test_BFu9s_BFu15ll_Vp()
{
  {
    init_simple_test("BFu9s_BFu15ll_Vp");
    static STRUCT_IF_C BFu9s_BFu15ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu15ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_Vp");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_Vp");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu15ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_Vp, BFu9s_BFu15ll_Vp)
//============================================================================


struct  BFu9s_BFu15s  {
  unsigned short v1:9;
  unsigned short v2:15;
};
//SIG(1 BFu9s_BFu15s) C1{ Fs:9 Fs:15}



static void Test_BFu9s_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu15s");
    static STRUCT_IF_C BFu9s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s, BFu9s_BFu15s)
//============================================================================


struct  BFu9s_BFu15s_BFu15i  {
  unsigned short v1:9;
  unsigned short v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu9s_BFu15s_BFu15i) C1{ Fs:9 Fs:15 Fi:15}



static void Test_BFu9s_BFu15s_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu15i");
    static STRUCT_IF_C BFu9s_BFu15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu15i, BFu9s_BFu15s_BFu15i)
//============================================================================


struct  BFu9s_BFu15s_BFu15ll  {
  unsigned short v1:9;
  unsigned short v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_BFu15s_BFu15ll) C1{ Fs:9 Fs:15 FL:15}



static void Test_BFu9s_BFu15s_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu9s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu15ll, BFu9s_BFu15s_BFu15ll)
//============================================================================


struct  BFu9s_BFu15s_BFu15s  {
  unsigned short v1:9;
  unsigned short v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu9s_BFu15s_BFu15s) C1{ Fs:9 Fs:15 Fs:15}



static void Test_BFu9s_BFu15s_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu15s");
    static STRUCT_IF_C BFu9s_BFu15s_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu15s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu15s, BFu9s_BFu15s_BFu15s)
//============================================================================


struct  BFu9s_BFu15s_BFu16i  {
  unsigned short v1:9;
  unsigned short v2:15;
  unsigned int v3:16;
};
//SIG(1 BFu9s_BFu15s_BFu16i) C1{ Fs:9 Fs:15 Fi:16}



static void Test_BFu9s_BFu15s_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu16i");
    static STRUCT_IF_C BFu9s_BFu15s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu15s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu15s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu16i, BFu9s_BFu15s_BFu16i)
//============================================================================


struct  BFu9s_BFu15s_BFu16ll  {
  unsigned short v1:9;
  unsigned short v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_BFu15s_BFu16ll) C1{ Fs:9 Fs:15 FL:16}



static void Test_BFu9s_BFu15s_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu15s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, 1, "BFu9s_BFu15s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, hide_ull(1LL<<15), "BFu9s_BFu15s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu16ll, BFu9s_BFu15s_BFu16ll)
//============================================================================


struct  BFu9s_BFu15s_BFu16s  {
  unsigned short v1:9;
  unsigned short v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu9s_BFu15s_BFu16s) C1{ Fs:9 Fs:15 Fs:16}



static void Test_BFu9s_BFu15s_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu16s");
    static STRUCT_IF_C BFu9s_BFu15s_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu15s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu15s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu15s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu15s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu16s, BFu9s_BFu15s_BFu16s)
//============================================================================


struct  BFu9s_BFu15s_BFu17i  {
  unsigned short v1:9;
  unsigned short v2:15;
  unsigned int v3:17;
};
//SIG(1 BFu9s_BFu15s_BFu17i) C1{ Fs:9 Fs:15 Fi:17}



static void Test_BFu9s_BFu15s_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu17i");
    static STRUCT_IF_C BFu9s_BFu15s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu9s_BFu15s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu15s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu17i, BFu9s_BFu15s_BFu17i)
//============================================================================


struct  BFu9s_BFu15s_BFu17ll  {
  unsigned short v1:9;
  unsigned short v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_BFu15s_BFu17ll) C1{ Fs:9 Fs:15 FL:17}



static void Test_BFu9s_BFu15s_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu15s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, 1, "BFu9s_BFu15s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, hide_ull(1LL<<16), "BFu9s_BFu15s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu17ll, BFu9s_BFu15s_BFu17ll)
//============================================================================


struct  BFu9s_BFu15s_BFu1c  {
  unsigned short v1:9;
  unsigned short v2:15;
  unsigned char v3:1;
};
//SIG(1 BFu9s_BFu15s_BFu1c) C1{ Fs:9 Fs:15 Fc:1}



static void Test_BFu9s_BFu15s_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu1c");
    static STRUCT_IF_C BFu9s_BFu15s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu15s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu15s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu1c");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu9s_BFu15s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu1c, BFu9s_BFu15s_BFu1c)
//============================================================================


struct  BFu9s_BFu15s_BFu1i  {
  unsigned short v1:9;
  unsigned short v2:15;
  unsigned int v3:1;
};
//SIG(1 BFu9s_BFu15s_BFu1i) C1{ Fs:9 Fs:15 Fi:1}



static void Test_BFu9s_BFu15s_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu1i");
    static STRUCT_IF_C BFu9s_BFu15s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu15s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu1i");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu9s_BFu15s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu1i, BFu9s_BFu15s_BFu1i)
//============================================================================


struct  BFu9s_BFu15s_BFu1ll  {
  unsigned short v1:9;
  unsigned short v2:15;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_BFu15s_BFu1ll) C1{ Fs:9 Fs:15 FL:1}



static void Test_BFu9s_BFu15s_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu15s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu15s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu1ll");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu9s_BFu15s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu1ll, BFu9s_BFu15s_BFu1ll)
//============================================================================


struct  BFu9s_BFu15s_BFu1s  {
  unsigned short v1:9;
  unsigned short v2:15;
  unsigned short v3:1;
};
//SIG(1 BFu9s_BFu15s_BFu1s) C1{ Fs:9 Fs:15 Fs:1}



static void Test_BFu9s_BFu15s_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu1s");
    static STRUCT_IF_C BFu9s_BFu15s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu15s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu15s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu1s");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu9s_BFu15s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu1s, BFu9s_BFu15s_BFu1s)
//============================================================================


struct  BFu9s_BFu15s_BFu31i  {
  unsigned short v1:9;
  unsigned short v2:15;
  unsigned int v3:31;
};
//SIG(1 BFu9s_BFu15s_BFu31i) C1{ Fs:9 Fs:15 Fi:31}



static void Test_BFu9s_BFu15s_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu31i");
    static STRUCT_IF_C BFu9s_BFu15s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_BFu15s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu15s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu31i, BFu9s_BFu15s_BFu31i)
//============================================================================


struct  BFu9s_BFu15s_BFu31ll  {
  unsigned short v1:9;
  unsigned short v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_BFu15s_BFu31ll) C1{ Fs:9 Fs:15 FL:31}



static void Test_BFu9s_BFu15s_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu15s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, 1, "BFu9s_BFu15s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, hide_ull(1LL<<30), "BFu9s_BFu15s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu31ll, BFu9s_BFu15s_BFu31ll)
//============================================================================


struct  BFu9s_BFu15s_BFu32i  {
  unsigned short v1:9;
  unsigned short v2:15;
  unsigned int v3:32;
};
//SIG(1 BFu9s_BFu15s_BFu32i) C1{ Fs:9 Fs:15 Fi:32}



static void Test_BFu9s_BFu15s_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu32i");
    static STRUCT_IF_C BFu9s_BFu15s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_BFu15s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu15s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu32i, BFu9s_BFu15s_BFu32i)
//============================================================================


struct  BFu9s_BFu15s_BFu32ll  {
  unsigned short v1:9;
  unsigned short v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_BFu15s_BFu32ll) C1{ Fs:9 Fs:15 FL:32}



static void Test_BFu9s_BFu15s_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu15s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, 1, "BFu9s_BFu15s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, hide_ull(1LL<<31), "BFu9s_BFu15s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu32ll, BFu9s_BFu15s_BFu32ll)
//============================================================================


struct  BFu9s_BFu15s_BFu33  {
  unsigned short v1:9;
  unsigned short v2:15;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_BFu15s_BFu33) C1{ Fs:9 Fs:15 FL:33}



static void Test_BFu9s_BFu15s_BFu33()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu33");
    static STRUCT_IF_C BFu9s_BFu15s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, 1, "BFu9s_BFu15s_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, hide_ull(1LL<<32), "BFu9s_BFu15s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu33, BFu9s_BFu15s_BFu33)
//============================================================================


struct  BFu9s_BFu15s_BFu7c  {
  unsigned short v1:9;
  unsigned short v2:15;
  unsigned char v3:7;
};
//SIG(1 BFu9s_BFu15s_BFu7c) C1{ Fs:9 Fs:15 Fc:7}



static void Test_BFu9s_BFu15s_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu7c");
    static STRUCT_IF_C BFu9s_BFu15s_BFu7c lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu15s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu15s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu9s_BFu15s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu15s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu7c, BFu9s_BFu15s_BFu7c)
//============================================================================


struct  BFu9s_BFu15s_BFu7i  {
  unsigned short v1:9;
  unsigned short v2:15;
  unsigned int v3:7;
};
//SIG(1 BFu9s_BFu15s_BFu7i) C1{ Fs:9 Fs:15 Fi:7}



static void Test_BFu9s_BFu15s_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu7i");
    static STRUCT_IF_C BFu9s_BFu15s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu9s_BFu15s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu15s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu7i, BFu9s_BFu15s_BFu7i)
//============================================================================


struct  BFu9s_BFu15s_BFu7ll  {
  unsigned short v1:9;
  unsigned short v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_BFu15s_BFu7ll) C1{ Fs:9 Fs:15 FL:7}



static void Test_BFu9s_BFu15s_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu15s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, 1, "BFu9s_BFu15s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, hide_ull(1LL<<6), "BFu9s_BFu15s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu7ll, BFu9s_BFu15s_BFu7ll)
//============================================================================


struct  BFu9s_BFu15s_BFu7s  {
  unsigned short v1:9;
  unsigned short v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu9s_BFu15s_BFu7s) C1{ Fs:9 Fs:15 Fs:7}



static void Test_BFu9s_BFu15s_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu7s");
    static STRUCT_IF_C BFu9s_BFu15s_BFu7s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu15s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu15s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu9s_BFu15s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu15s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu7s, BFu9s_BFu15s_BFu7s)
//============================================================================


struct  BFu9s_BFu15s_BFu8c  {
  unsigned short v1:9;
  unsigned short v2:15;
  unsigned char v3:8;
};
//SIG(1 BFu9s_BFu15s_BFu8c) C1{ Fs:9 Fs:15 Fc:8}



static void Test_BFu9s_BFu15s_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu8c");
    static STRUCT_IF_C BFu9s_BFu15s_BFu8c lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu15s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu15s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_BFu15s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu15s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu8c, BFu9s_BFu15s_BFu8c)
//============================================================================


struct  BFu9s_BFu15s_BFu8i  {
  unsigned short v1:9;
  unsigned short v2:15;
  unsigned int v3:8;
};
//SIG(1 BFu9s_BFu15s_BFu8i) C1{ Fs:9 Fs:15 Fi:8}



static void Test_BFu9s_BFu15s_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu8i");
    static STRUCT_IF_C BFu9s_BFu15s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_BFu15s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu15s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu8i, BFu9s_BFu15s_BFu8i)
//============================================================================


struct  BFu9s_BFu15s_BFu8ll  {
  unsigned short v1:9;
  unsigned short v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_BFu15s_BFu8ll) C1{ Fs:9 Fs:15 FL:8}



static void Test_BFu9s_BFu15s_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu15s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, 1, "BFu9s_BFu15s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, hide_ull(1LL<<7), "BFu9s_BFu15s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu8ll, BFu9s_BFu15s_BFu8ll)
//============================================================================


struct  BFu9s_BFu15s_BFu8s  {
  unsigned short v1:9;
  unsigned short v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu9s_BFu15s_BFu8s) C1{ Fs:9 Fs:15 Fs:8}



static void Test_BFu9s_BFu15s_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu8s");
    static STRUCT_IF_C BFu9s_BFu15s_BFu8s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu15s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu15s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_BFu15s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu15s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu8s, BFu9s_BFu15s_BFu8s)
//============================================================================


struct  BFu9s_BFu15s_BFu9i  {
  unsigned short v1:9;
  unsigned short v2:15;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFu15s_BFu9i) C1{ Fs:9 Fs:15 Fi:9}



static void Test_BFu9s_BFu15s_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu9i");
    static STRUCT_IF_C BFu9s_BFu15s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu15s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu9i, BFu9s_BFu15s_BFu9i)
//============================================================================


struct  BFu9s_BFu15s_BFu9ll  {
  unsigned short v1:9;
  unsigned short v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFu15s_BFu9ll) C1{ Fs:9 Fs:15 FL:9}



static void Test_BFu9s_BFu15s_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu15s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, 1, "BFu9s_BFu15s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu9ll, BFu9s_BFu15s_BFu9ll)
//============================================================================


struct  BFu9s_BFu15s_BFu9s  {
  unsigned short v1:9;
  unsigned short v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFu15s_BFu9s) C1{ Fs:9 Fs:15 Fs:9}



static void Test_BFu9s_BFu15s_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu9s");
    static STRUCT_IF_C BFu9s_BFu15s_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu15s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu15s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu15s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu9s, BFu9s_BFu15s_BFu9s)
//============================================================================


struct  BFu9s_BFu15s_C  {
  unsigned short v1:9;
  unsigned short v2:15;
  char v3;
};
//SIG(1 BFu9s_BFu15s_C) C1{ Fs:9 Fs:15 Fc}



static void Test_BFu9s_BFu15s_C()
{
  {
    init_simple_test("BFu9s_BFu15s_C");
    static STRUCT_IF_C BFu9s_BFu15s_C lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu15s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu15s_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_C");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_C");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_C");
    check_field_offset(lv, v3, 4, "BFu9s_BFu15s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_C, BFu9s_BFu15s_C)
//============================================================================


struct  BFu9s_BFu15s_D  {
  unsigned short v1:9;
  unsigned short v2:15;
  double v3;
};
//SIG(1 BFu9s_BFu15s_D) C1{ Fs:9 Fs:15 FL}



static void Test_BFu9s_BFu15s_D()
{
  {
    init_simple_test("BFu9s_BFu15s_D");
    static STRUCT_IF_C BFu9s_BFu15s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu15s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15s_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_D");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_D");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu15s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_D, BFu9s_BFu15s_D)
//============================================================================


struct  BFu9s_BFu15s_F  {
  unsigned short v1:9;
  unsigned short v2:15;
  float v3;
};
//SIG(1 BFu9s_BFu15s_F) C1{ Fs:9 Fs:15 Fi}



static void Test_BFu9s_BFu15s_F()
{
  {
    init_simple_test("BFu9s_BFu15s_F");
    static STRUCT_IF_C BFu9s_BFu15s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15s_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_F");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_F");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_F");
    check_field_offset(lv, v3, 4, "BFu9s_BFu15s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_F, BFu9s_BFu15s_F)
//============================================================================


struct  BFu9s_BFu15s_I  {
  unsigned short v1:9;
  unsigned short v2:15;
  int v3;
};
//SIG(1 BFu9s_BFu15s_I) C1{ Fs:9 Fs:15 Fi}



static void Test_BFu9s_BFu15s_I()
{
  {
    init_simple_test("BFu9s_BFu15s_I");
    static STRUCT_IF_C BFu9s_BFu15s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15s_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_I");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_I");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_I");
    check_field_offset(lv, v3, 4, "BFu9s_BFu15s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_I, BFu9s_BFu15s_I)
//============================================================================


struct  BFu9s_BFu15s_Ip  {
  unsigned short v1:9;
  unsigned short v2:15;
  int *v3;
};
//SIG(1 BFu9s_BFu15s_Ip) C1{ Fs:9 Fs:15 Fp}



static void Test_BFu9s_BFu15s_Ip()
{
  {
    init_simple_test("BFu9s_BFu15s_Ip");
    static STRUCT_IF_C BFu9s_BFu15s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu15s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu15s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_Ip, BFu9s_BFu15s_Ip)
//============================================================================


struct  BFu9s_BFu15s_L  {
  unsigned short v1:9;
  unsigned short v2:15;
  __tsi64 v3;
};
//SIG(1 BFu9s_BFu15s_L) C1{ Fs:9 Fs:15 FL}



static void Test_BFu9s_BFu15s_L()
{
  {
    init_simple_test("BFu9s_BFu15s_L");
    static STRUCT_IF_C BFu9s_BFu15s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu15s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15s_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_L");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_L");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu15s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_L, BFu9s_BFu15s_L)
//============================================================================


struct  BFu9s_BFu15s_S  {
  unsigned short v1:9;
  unsigned short v2:15;
  short v3;
};
//SIG(1 BFu9s_BFu15s_S) C1{ Fs:9 Fs:15 Fs}



static void Test_BFu9s_BFu15s_S()
{
  {
    init_simple_test("BFu9s_BFu15s_S");
    static STRUCT_IF_C BFu9s_BFu15s_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu15s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu15s_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_S");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_S");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_S");
    check_field_offset(lv, v3, 4, "BFu9s_BFu15s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_S, BFu9s_BFu15s_S)
//============================================================================


struct  BFu9s_BFu15s_Uc  {
  unsigned short v1:9;
  unsigned short v2:15;
  unsigned char v3;
};
//SIG(1 BFu9s_BFu15s_Uc) C1{ Fs:9 Fs:15 Fc}



static void Test_BFu9s_BFu15s_Uc()
{
  {
    init_simple_test("BFu9s_BFu15s_Uc");
    static STRUCT_IF_C BFu9s_BFu15s_Uc lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu15s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu15s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_Uc");
    check_field_offset(lv, v3, 4, "BFu9s_BFu15s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_Uc, BFu9s_BFu15s_Uc)
//============================================================================


struct  BFu9s_BFu15s_Ui  {
  unsigned short v1:9;
  unsigned short v2:15;
  unsigned int v3;
};
//SIG(1 BFu9s_BFu15s_Ui) C1{ Fs:9 Fs:15 Fi}



static void Test_BFu9s_BFu15s_Ui()
{
  {
    init_simple_test("BFu9s_BFu15s_Ui");
    static STRUCT_IF_C BFu9s_BFu15s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu15s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_Ui");
    check_field_offset(lv, v3, 4, "BFu9s_BFu15s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_Ui, BFu9s_BFu15s_Ui)
//============================================================================


struct  BFu9s_BFu15s_Ul  {
  unsigned short v1:9;
  unsigned short v2:15;
  __tsu64 v3;
};
//SIG(1 BFu9s_BFu15s_Ul) C1{ Fs:9 Fs:15 FL}



static void Test_BFu9s_BFu15s_Ul()
{
  {
    init_simple_test("BFu9s_BFu15s_Ul");
    static STRUCT_IF_C BFu9s_BFu15s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu15s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu15s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_Ul, BFu9s_BFu15s_Ul)
//============================================================================


struct  BFu9s_BFu15s_Us  {
  unsigned short v1:9;
  unsigned short v2:15;
  unsigned short v3;
};
//SIG(1 BFu9s_BFu15s_Us) C1{ Fs:9 Fs:15 Fs}



static void Test_BFu9s_BFu15s_Us()
{
  {
    init_simple_test("BFu9s_BFu15s_Us");
    static STRUCT_IF_C BFu9s_BFu15s_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu15s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu15s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_Us");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_Us");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_Us");
    check_field_offset(lv, v3, 4, "BFu9s_BFu15s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_Us, BFu9s_BFu15s_Us)
//============================================================================


struct  BFu9s_BFu15s_Vp  {
  unsigned short v1:9;
  unsigned short v2:15;
  void *v3;
};
//SIG(1 BFu9s_BFu15s_Vp) C1{ Fs:9 Fs:15 Fp}



static void Test_BFu9s_BFu15s_Vp()
{
  {
    init_simple_test("BFu9s_BFu15s_Vp");
    static STRUCT_IF_C BFu9s_BFu15s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu15s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu15s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_Vp, BFu9s_BFu15s_Vp)
//============================================================================


struct  BFu9s_BFu16i  {
  unsigned short v1:9;
  unsigned int v2:16;
};
//SIG(1 BFu9s_BFu16i) C1{ Fs:9 Fi:16}



static void Test_BFu9s_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu16i");
    static STRUCT_IF_C BFu9s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i, BFu9s_BFu16i)
//============================================================================


struct  BFu9s_BFu16i_BFu15i  {
  unsigned short v1:9;
  unsigned int v2:16;
  unsigned int v3:15;
};
//SIG(1 BFu9s_BFu16i_BFu15i) C1{ Fs:9 Fi:16 Fi:15}



static void Test_BFu9s_BFu16i_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu15i");
    static STRUCT_IF_C BFu9s_BFu16i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_BFu16i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu16i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu15i, BFu9s_BFu16i_BFu15i)
//============================================================================


struct  BFu9s_BFu16i_BFu15ll  {
  unsigned short v1:9;
  unsigned int v2:16;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_BFu16i_BFu15ll) C1{ Fs:9 Fi:16 FL:15}



static void Test_BFu9s_BFu16i_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu16i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, 1, "BFu9s_BFu16i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu16i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu15ll, BFu9s_BFu16i_BFu15ll)
//============================================================================


struct  BFu9s_BFu16i_BFu15s  {
  unsigned short v1:9;
  unsigned int v2:16;
  unsigned short v3:15;
};
//SIG(1 BFu9s_BFu16i_BFu15s) C1{ Fs:9 Fi:16 Fs:15}



static void Test_BFu9s_BFu16i_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu15s");
    static STRUCT_IF_C BFu9s_BFu16i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu16i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu15s, BFu9s_BFu16i_BFu15s)
//============================================================================


struct  BFu9s_BFu16i_BFu16i  {
  unsigned short v1:9;
  unsigned int v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu9s_BFu16i_BFu16i) C1{ Fs:9 Fi:16 Fi:16}



static void Test_BFu9s_BFu16i_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu16i");
    static STRUCT_IF_C BFu9s_BFu16i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu16i, BFu9s_BFu16i_BFu16i)
//============================================================================


struct  BFu9s_BFu16i_BFu16ll  {
  unsigned short v1:9;
  unsigned int v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_BFu16i_BFu16ll) C1{ Fs:9 Fi:16 FL:16}



static void Test_BFu9s_BFu16i_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu16i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, 1, "BFu9s_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu16ll, BFu9s_BFu16i_BFu16ll)
//============================================================================


struct  BFu9s_BFu16i_BFu16s  {
  unsigned short v1:9;
  unsigned int v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu9s_BFu16i_BFu16s) C1{ Fs:9 Fi:16 Fs:16}



static void Test_BFu9s_BFu16i_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu16s");
    static STRUCT_IF_C BFu9s_BFu16i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu16s, BFu9s_BFu16i_BFu16s)
//============================================================================


struct  BFu9s_BFu16i_BFu17i  {
  unsigned short v1:9;
  unsigned int v2:16;
  unsigned int v3:17;
};
//SIG(1 BFu9s_BFu16i_BFu17i) C1{ Fs:9 Fi:16 Fi:17}



static void Test_BFu9s_BFu16i_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu17i");
    static STRUCT_IF_C BFu9s_BFu16i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu9s_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu16i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu17i, BFu9s_BFu16i_BFu17i)
//============================================================================


struct  BFu9s_BFu16i_BFu17ll  {
  unsigned short v1:9;
  unsigned int v2:16;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_BFu16i_BFu17ll) C1{ Fs:9 Fi:16 FL:17}



static void Test_BFu9s_BFu16i_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu16i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, 1, "BFu9s_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu16i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu17ll, BFu9s_BFu16i_BFu17ll)
//============================================================================


struct  BFu9s_BFu16i_BFu1c  {
  unsigned short v1:9;
  unsigned int v2:16;
  unsigned char v3:1;
};
//SIG(1 BFu9s_BFu16i_BFu1c) C1{ Fs:9 Fi:16 Fc:1}



static void Test_BFu9s_BFu16i_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu1c");
    static STRUCT_IF_C BFu9s_BFu16i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu16i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu1c");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu9s_BFu16i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu1c, BFu9s_BFu16i_BFu1c)
//============================================================================


struct  BFu9s_BFu16i_BFu1i  {
  unsigned short v1:9;
  unsigned int v2:16;
  unsigned int v3:1;
};
//SIG(1 BFu9s_BFu16i_BFu1i) C1{ Fs:9 Fi:16 Fi:1}



static void Test_BFu9s_BFu16i_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu1i");
    static STRUCT_IF_C BFu9s_BFu16i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu16i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu1i");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu9s_BFu16i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu1i, BFu9s_BFu16i_BFu1i)
//============================================================================


struct  BFu9s_BFu16i_BFu1ll  {
  unsigned short v1:9;
  unsigned int v2:16;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_BFu16i_BFu1ll) C1{ Fs:9 Fi:16 FL:1}



static void Test_BFu9s_BFu16i_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu16i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu16i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu1ll");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu9s_BFu16i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu1ll, BFu9s_BFu16i_BFu1ll)
//============================================================================


struct  BFu9s_BFu16i_BFu1s  {
  unsigned short v1:9;
  unsigned int v2:16;
  unsigned short v3:1;
};
//SIG(1 BFu9s_BFu16i_BFu1s) C1{ Fs:9 Fi:16 Fs:1}



static void Test_BFu9s_BFu16i_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu1s");
    static STRUCT_IF_C BFu9s_BFu16i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu16i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu1s");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu9s_BFu16i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu1s, BFu9s_BFu16i_BFu1s)
//============================================================================


struct  BFu9s_BFu16i_BFu31i  {
  unsigned short v1:9;
  unsigned int v2:16;
  unsigned int v3:31;
};
//SIG(1 BFu9s_BFu16i_BFu31i) C1{ Fs:9 Fi:16 Fi:31}



static void Test_BFu9s_BFu16i_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu31i");
    static STRUCT_IF_C BFu9s_BFu16i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu16i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu31i, BFu9s_BFu16i_BFu31i)
//============================================================================


struct  BFu9s_BFu16i_BFu31ll  {
  unsigned short v1:9;
  unsigned int v2:16;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_BFu16i_BFu31ll) C1{ Fs:9 Fi:16 FL:31}



static void Test_BFu9s_BFu16i_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu16i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, 1, "BFu9s_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu16i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu31ll, BFu9s_BFu16i_BFu31ll)
//============================================================================


struct  BFu9s_BFu16i_BFu32i  {
  unsigned short v1:9;
  unsigned int v2:16;
  unsigned int v3:32;
};
//SIG(1 BFu9s_BFu16i_BFu32i) C1{ Fs:9 Fi:16 Fi:32}



static void Test_BFu9s_BFu16i_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu32i");
    static STRUCT_IF_C BFu9s_BFu16i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu16i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu32i, BFu9s_BFu16i_BFu32i)
//============================================================================


struct  BFu9s_BFu16i_BFu32ll  {
  unsigned short v1:9;
  unsigned int v2:16;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_BFu16i_BFu32ll) C1{ Fs:9 Fi:16 FL:32}



static void Test_BFu9s_BFu16i_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu16i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, 1, "BFu9s_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu16i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu32ll, BFu9s_BFu16i_BFu32ll)
//============================================================================


struct  BFu9s_BFu16i_BFu33  {
  unsigned short v1:9;
  unsigned int v2:16;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_BFu16i_BFu33) C1{ Fs:9 Fi:16 FL:33}



static void Test_BFu9s_BFu16i_BFu33()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu33");
    static STRUCT_IF_C BFu9s_BFu16i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, 1, "BFu9s_BFu16i_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu16i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu33, BFu9s_BFu16i_BFu33)
//============================================================================


struct  BFu9s_BFu16i_BFu7c  {
  unsigned short v1:9;
  unsigned int v2:16;
  unsigned char v3:7;
};
//SIG(1 BFu9s_BFu16i_BFu7c) C1{ Fs:9 Fi:16 Fc:7}



static void Test_BFu9s_BFu16i_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu7c");
    static STRUCT_IF_C BFu9s_BFu16i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu16i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu9s_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu16i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu7c, BFu9s_BFu16i_BFu7c)
//============================================================================


struct  BFu9s_BFu16i_BFu7i  {
  unsigned short v1:9;
  unsigned int v2:16;
  unsigned int v3:7;
};
//SIG(1 BFu9s_BFu16i_BFu7i) C1{ Fs:9 Fi:16 Fi:7}



static void Test_BFu9s_BFu16i_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu7i");
    static STRUCT_IF_C BFu9s_BFu16i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu16i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu9s_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu16i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu7i, BFu9s_BFu16i_BFu7i)
//============================================================================


struct  BFu9s_BFu16i_BFu7ll  {
  unsigned short v1:9;
  unsigned int v2:16;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_BFu16i_BFu7ll) C1{ Fs:9 Fi:16 FL:7}



static void Test_BFu9s_BFu16i_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu16i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu16i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu9s_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu16i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu7ll, BFu9s_BFu16i_BFu7ll)
//============================================================================


struct  BFu9s_BFu16i_BFu7s  {
  unsigned short v1:9;
  unsigned int v2:16;
  unsigned short v3:7;
};
//SIG(1 BFu9s_BFu16i_BFu7s) C1{ Fs:9 Fi:16 Fs:7}



static void Test_BFu9s_BFu16i_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu7s");
    static STRUCT_IF_C BFu9s_BFu16i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu16i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu9s_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu16i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu7s, BFu9s_BFu16i_BFu7s)
//============================================================================


struct  BFu9s_BFu16i_BFu8c  {
  unsigned short v1:9;
  unsigned int v2:16;
  unsigned char v3:8;
};
//SIG(1 BFu9s_BFu16i_BFu8c) C1{ Fs:9 Fi:16 Fc:8}



static void Test_BFu9s_BFu16i_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu8c");
    static STRUCT_IF_C BFu9s_BFu16i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu16i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu8c, BFu9s_BFu16i_BFu8c)
//============================================================================


struct  BFu9s_BFu16i_BFu8i  {
  unsigned short v1:9;
  unsigned int v2:16;
  unsigned int v3:8;
};
//SIG(1 BFu9s_BFu16i_BFu8i) C1{ Fs:9 Fi:16 Fi:8}



static void Test_BFu9s_BFu16i_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu8i");
    static STRUCT_IF_C BFu9s_BFu16i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu16i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu8i, BFu9s_BFu16i_BFu8i)
//============================================================================


struct  BFu9s_BFu16i_BFu8ll  {
  unsigned short v1:9;
  unsigned int v2:16;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_BFu16i_BFu8ll) C1{ Fs:9 Fi:16 FL:8}



static void Test_BFu9s_BFu16i_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu16i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, 1, "BFu9s_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu16i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu8ll, BFu9s_BFu16i_BFu8ll)
//============================================================================


struct  BFu9s_BFu16i_BFu8s  {
  unsigned short v1:9;
  unsigned int v2:16;
  unsigned short v3:8;
};
//SIG(1 BFu9s_BFu16i_BFu8s) C1{ Fs:9 Fi:16 Fs:8}



static void Test_BFu9s_BFu16i_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu8s");
    static STRUCT_IF_C BFu9s_BFu16i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu16i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu8s, BFu9s_BFu16i_BFu8s)
//============================================================================


struct  BFu9s_BFu16i_BFu9i  {
  unsigned short v1:9;
  unsigned int v2:16;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFu16i_BFu9i) C1{ Fs:9 Fi:16 Fi:9}



static void Test_BFu9s_BFu16i_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu9i");
    static STRUCT_IF_C BFu9s_BFu16i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu9i, BFu9s_BFu16i_BFu9i)
//============================================================================


struct  BFu9s_BFu16i_BFu9ll  {
  unsigned short v1:9;
  unsigned int v2:16;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFu16i_BFu9ll) C1{ Fs:9 Fi:16 FL:9}



static void Test_BFu9s_BFu16i_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu16i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu9ll, BFu9s_BFu16i_BFu9ll)
//============================================================================


struct  BFu9s_BFu16i_BFu9s  {
  unsigned short v1:9;
  unsigned int v2:16;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFu16i_BFu9s) C1{ Fs:9 Fi:16 Fs:9}



static void Test_BFu9s_BFu16i_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu9s");
    static STRUCT_IF_C BFu9s_BFu16i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu9s, BFu9s_BFu16i_BFu9s)
//============================================================================


struct  BFu9s_BFu16i_C  {
  unsigned short v1:9;
  unsigned int v2:16;
  char v3;
};
//SIG(1 BFu9s_BFu16i_C) C1{ Fs:9 Fi:16 Fc}



static void Test_BFu9s_BFu16i_C()
{
  {
    init_simple_test("BFu9s_BFu16i_C");
    static STRUCT_IF_C BFu9s_BFu16i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_C");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_C");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_C");
    check_field_offset(lv, v3, 4, "BFu9s_BFu16i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_C, BFu9s_BFu16i_C)
//============================================================================


struct  BFu9s_BFu16i_D  {
  unsigned short v1:9;
  unsigned int v2:16;
  double v3;
};
//SIG(1 BFu9s_BFu16i_D) C1{ Fs:9 Fi:16 FL}



static void Test_BFu9s_BFu16i_D()
{
  {
    init_simple_test("BFu9s_BFu16i_D");
    static STRUCT_IF_C BFu9s_BFu16i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu16i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16i_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_D");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_D");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu16i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_D, BFu9s_BFu16i_D)
//============================================================================


struct  BFu9s_BFu16i_F  {
  unsigned short v1:9;
  unsigned int v2:16;
  float v3;
};
//SIG(1 BFu9s_BFu16i_F) C1{ Fs:9 Fi:16 Fi}



static void Test_BFu9s_BFu16i_F()
{
  {
    init_simple_test("BFu9s_BFu16i_F");
    static STRUCT_IF_C BFu9s_BFu16i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_F");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_F");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_F");
    check_field_offset(lv, v3, 4, "BFu9s_BFu16i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_F, BFu9s_BFu16i_F)
//============================================================================


struct  BFu9s_BFu16i_I  {
  unsigned short v1:9;
  unsigned int v2:16;
  int v3;
};
//SIG(1 BFu9s_BFu16i_I) C1{ Fs:9 Fi:16 Fi}



static void Test_BFu9s_BFu16i_I()
{
  {
    init_simple_test("BFu9s_BFu16i_I");
    static STRUCT_IF_C BFu9s_BFu16i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_I");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_I");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_I");
    check_field_offset(lv, v3, 4, "BFu9s_BFu16i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_I, BFu9s_BFu16i_I)
//============================================================================


struct  BFu9s_BFu16i_Ip  {
  unsigned short v1:9;
  unsigned int v2:16;
  int *v3;
};
//SIG(1 BFu9s_BFu16i_Ip) C1{ Fs:9 Fi:16 Fp}



static void Test_BFu9s_BFu16i_Ip()
{
  {
    init_simple_test("BFu9s_BFu16i_Ip");
    static STRUCT_IF_C BFu9s_BFu16i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu16i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_Ip");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_Ip");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu16i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_Ip, BFu9s_BFu16i_Ip)
//============================================================================


struct  BFu9s_BFu16i_L  {
  unsigned short v1:9;
  unsigned int v2:16;
  __tsi64 v3;
};
//SIG(1 BFu9s_BFu16i_L) C1{ Fs:9 Fi:16 FL}



static void Test_BFu9s_BFu16i_L()
{
  {
    init_simple_test("BFu9s_BFu16i_L");
    static STRUCT_IF_C BFu9s_BFu16i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu16i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16i_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_L");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_L");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu16i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_L, BFu9s_BFu16i_L)
//============================================================================


struct  BFu9s_BFu16i_S  {
  unsigned short v1:9;
  unsigned int v2:16;
  short v3;
};
//SIG(1 BFu9s_BFu16i_S) C1{ Fs:9 Fi:16 Fs}



static void Test_BFu9s_BFu16i_S()
{
  {
    init_simple_test("BFu9s_BFu16i_S");
    static STRUCT_IF_C BFu9s_BFu16i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_S");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_S");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_S");
    check_field_offset(lv, v3, 4, "BFu9s_BFu16i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_S, BFu9s_BFu16i_S)
//============================================================================


struct  BFu9s_BFu16i_Uc  {
  unsigned short v1:9;
  unsigned int v2:16;
  unsigned char v3;
};
//SIG(1 BFu9s_BFu16i_Uc) C1{ Fs:9 Fi:16 Fc}



static void Test_BFu9s_BFu16i_Uc()
{
  {
    init_simple_test("BFu9s_BFu16i_Uc");
    static STRUCT_IF_C BFu9s_BFu16i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_Uc");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_Uc");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_Uc");
    check_field_offset(lv, v3, 4, "BFu9s_BFu16i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_Uc, BFu9s_BFu16i_Uc)
//============================================================================


struct  BFu9s_BFu16i_Ui  {
  unsigned short v1:9;
  unsigned int v2:16;
  unsigned int v3;
};
//SIG(1 BFu9s_BFu16i_Ui) C1{ Fs:9 Fi:16 Fi}



static void Test_BFu9s_BFu16i_Ui()
{
  {
    init_simple_test("BFu9s_BFu16i_Ui");
    static STRUCT_IF_C BFu9s_BFu16i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_Ui");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_Ui");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_Ui");
    check_field_offset(lv, v3, 4, "BFu9s_BFu16i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_Ui, BFu9s_BFu16i_Ui)
//============================================================================


struct  BFu9s_BFu16i_Ul  {
  unsigned short v1:9;
  unsigned int v2:16;
  __tsu64 v3;
};
//SIG(1 BFu9s_BFu16i_Ul) C1{ Fs:9 Fi:16 FL}



static void Test_BFu9s_BFu16i_Ul()
{
  {
    init_simple_test("BFu9s_BFu16i_Ul");
    static STRUCT_IF_C BFu9s_BFu16i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu16i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_Ul");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_Ul");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu16i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_Ul, BFu9s_BFu16i_Ul)
//============================================================================


struct  BFu9s_BFu16i_Us  {
  unsigned short v1:9;
  unsigned int v2:16;
  unsigned short v3;
};
//SIG(1 BFu9s_BFu16i_Us) C1{ Fs:9 Fi:16 Fs}



static void Test_BFu9s_BFu16i_Us()
{
  {
    init_simple_test("BFu9s_BFu16i_Us");
    static STRUCT_IF_C BFu9s_BFu16i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_Us");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_Us");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_Us");
    check_field_offset(lv, v3, 4, "BFu9s_BFu16i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_Us, BFu9s_BFu16i_Us)
//============================================================================


struct  BFu9s_BFu16i_Vp  {
  unsigned short v1:9;
  unsigned int v2:16;
  void *v3;
};
//SIG(1 BFu9s_BFu16i_Vp) C1{ Fs:9 Fi:16 Fp}



static void Test_BFu9s_BFu16i_Vp()
{
  {
    init_simple_test("BFu9s_BFu16i_Vp");
    static STRUCT_IF_C BFu9s_BFu16i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu16i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_Vp");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_Vp");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu16i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_Vp, BFu9s_BFu16i_Vp)
//============================================================================


struct  BFu9s_BFu16ll  {
  unsigned short v1:9;
  __tsu64 v2:16;
};
//SIG(1 BFu9s_BFu16ll) C1{ Fs:9 FL:16}



static void Test_BFu9s_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll, BFu9s_BFu16ll)
//============================================================================


struct  BFu9s_BFu16ll_BFu15i  {
  unsigned short v1:9;
  __tsu64 v2:16;
  unsigned int v3:15;
};
//SIG(1 BFu9s_BFu16ll_BFu15i) C1{ Fs:9 FL:16 Fi:15}



static void Test_BFu9s_BFu16ll_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu15i");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu16ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu15i, BFu9s_BFu16ll_BFu15i)
//============================================================================


struct  BFu9s_BFu16ll_BFu15ll  {
  unsigned short v1:9;
  __tsu64 v2:16;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_BFu16ll_BFu15ll) C1{ Fs:9 FL:16 FL:15}



static void Test_BFu9s_BFu16ll_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, 1, "BFu9s_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu16ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu15ll, BFu9s_BFu16ll_BFu15ll)
//============================================================================


struct  BFu9s_BFu16ll_BFu15s  {
  unsigned short v1:9;
  __tsu64 v2:16;
  unsigned short v3:15;
};
//SIG(1 BFu9s_BFu16ll_BFu15s) C1{ Fs:9 FL:16 Fs:15}



static void Test_BFu9s_BFu16ll_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu15s");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu16ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu15s, BFu9s_BFu16ll_BFu15s)
//============================================================================


struct  BFu9s_BFu16ll_BFu16i  {
  unsigned short v1:9;
  __tsu64 v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu9s_BFu16ll_BFu16i) C1{ Fs:9 FL:16 Fi:16}



static void Test_BFu9s_BFu16ll_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu16i");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu16i, BFu9s_BFu16ll_BFu16i)
//============================================================================


struct  BFu9s_BFu16ll_BFu16ll  {
  unsigned short v1:9;
  __tsu64 v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_BFu16ll_BFu16ll) C1{ Fs:9 FL:16 FL:16}



static void Test_BFu9s_BFu16ll_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, 1, "BFu9s_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu16ll, BFu9s_BFu16ll_BFu16ll)
//============================================================================


struct  BFu9s_BFu16ll_BFu16s  {
  unsigned short v1:9;
  __tsu64 v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu9s_BFu16ll_BFu16s) C1{ Fs:9 FL:16 Fs:16}



static void Test_BFu9s_BFu16ll_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu16s");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu16s, BFu9s_BFu16ll_BFu16s)
//============================================================================


struct  BFu9s_BFu16ll_BFu17i  {
  unsigned short v1:9;
  __tsu64 v2:16;
  unsigned int v3:17;
};
//SIG(1 BFu9s_BFu16ll_BFu17i) C1{ Fs:9 FL:16 Fi:17}



static void Test_BFu9s_BFu16ll_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu17i");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu9s_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu16ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu17i, BFu9s_BFu16ll_BFu17i)
//============================================================================


struct  BFu9s_BFu16ll_BFu17ll  {
  unsigned short v1:9;
  __tsu64 v2:16;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_BFu16ll_BFu17ll) C1{ Fs:9 FL:16 FL:17}



static void Test_BFu9s_BFu16ll_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, 1, "BFu9s_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu16ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu17ll, BFu9s_BFu16ll_BFu17ll)
//============================================================================


struct  BFu9s_BFu16ll_BFu1c  {
  unsigned short v1:9;
  __tsu64 v2:16;
  unsigned char v3:1;
};
//SIG(1 BFu9s_BFu16ll_BFu1c) C1{ Fs:9 FL:16 Fc:1}



static void Test_BFu9s_BFu16ll_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu1c");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu16ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu1c");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu9s_BFu16ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu1c, BFu9s_BFu16ll_BFu1c)
//============================================================================


struct  BFu9s_BFu16ll_BFu1i  {
  unsigned short v1:9;
  __tsu64 v2:16;
  unsigned int v3:1;
};
//SIG(1 BFu9s_BFu16ll_BFu1i) C1{ Fs:9 FL:16 Fi:1}



static void Test_BFu9s_BFu16ll_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu1i");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu16ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu1i");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu9s_BFu16ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu1i, BFu9s_BFu16ll_BFu1i)
//============================================================================


struct  BFu9s_BFu16ll_BFu1ll  {
  unsigned short v1:9;
  __tsu64 v2:16;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_BFu16ll_BFu1ll) C1{ Fs:9 FL:16 FL:1}



static void Test_BFu9s_BFu16ll_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu16ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu9s_BFu16ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu1ll, BFu9s_BFu16ll_BFu1ll)
//============================================================================


struct  BFu9s_BFu16ll_BFu1s  {
  unsigned short v1:9;
  __tsu64 v2:16;
  unsigned short v3:1;
};
//SIG(1 BFu9s_BFu16ll_BFu1s) C1{ Fs:9 FL:16 Fs:1}



static void Test_BFu9s_BFu16ll_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu1s");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu16ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu1s");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu9s_BFu16ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu1s, BFu9s_BFu16ll_BFu1s)
//============================================================================


struct  BFu9s_BFu16ll_BFu31i  {
  unsigned short v1:9;
  __tsu64 v2:16;
  unsigned int v3:31;
};
//SIG(1 BFu9s_BFu16ll_BFu31i) C1{ Fs:9 FL:16 Fi:31}



static void Test_BFu9s_BFu16ll_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu31i");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu16ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu31i, BFu9s_BFu16ll_BFu31i)
//============================================================================


struct  BFu9s_BFu16ll_BFu31ll  {
  unsigned short v1:9;
  __tsu64 v2:16;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_BFu16ll_BFu31ll) C1{ Fs:9 FL:16 FL:31}



static void Test_BFu9s_BFu16ll_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, 1, "BFu9s_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu16ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu31ll, BFu9s_BFu16ll_BFu31ll)
//============================================================================


struct  BFu9s_BFu16ll_BFu32i  {
  unsigned short v1:9;
  __tsu64 v2:16;
  unsigned int v3:32;
};
//SIG(1 BFu9s_BFu16ll_BFu32i) C1{ Fs:9 FL:16 Fi:32}



static void Test_BFu9s_BFu16ll_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu32i");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu16ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu32i, BFu9s_BFu16ll_BFu32i)
//============================================================================


struct  BFu9s_BFu16ll_BFu32ll  {
  unsigned short v1:9;
  __tsu64 v2:16;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_BFu16ll_BFu32ll) C1{ Fs:9 FL:16 FL:32}



static void Test_BFu9s_BFu16ll_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, 1, "BFu9s_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu16ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu32ll, BFu9s_BFu16ll_BFu32ll)
//============================================================================


struct  BFu9s_BFu16ll_BFu33  {
  unsigned short v1:9;
  __tsu64 v2:16;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_BFu16ll_BFu33) C1{ Fs:9 FL:16 FL:33}



static void Test_BFu9s_BFu16ll_BFu33()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu33");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, 1, "BFu9s_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu16ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu33, BFu9s_BFu16ll_BFu33)
//============================================================================


struct  BFu9s_BFu16ll_BFu7c  {
  unsigned short v1:9;
  __tsu64 v2:16;
  unsigned char v3:7;
};
//SIG(1 BFu9s_BFu16ll_BFu7c) C1{ Fs:9 FL:16 Fc:7}



static void Test_BFu9s_BFu16ll_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu7c");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu16ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu9s_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu16ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu7c, BFu9s_BFu16ll_BFu7c)
//============================================================================


struct  BFu9s_BFu16ll_BFu7i  {
  unsigned short v1:9;
  __tsu64 v2:16;
  unsigned int v3:7;
};
//SIG(1 BFu9s_BFu16ll_BFu7i) C1{ Fs:9 FL:16 Fi:7}



static void Test_BFu9s_BFu16ll_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu7i");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu16ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu9s_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu16ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu7i, BFu9s_BFu16ll_BFu7i)
//============================================================================


struct  BFu9s_BFu16ll_BFu7ll  {
  unsigned short v1:9;
  __tsu64 v2:16;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_BFu16ll_BFu7ll) C1{ Fs:9 FL:16 FL:7}



static void Test_BFu9s_BFu16ll_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu16ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu9s_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu16ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu7ll, BFu9s_BFu16ll_BFu7ll)
//============================================================================


struct  BFu9s_BFu16ll_BFu7s  {
  unsigned short v1:9;
  __tsu64 v2:16;
  unsigned short v3:7;
};
//SIG(1 BFu9s_BFu16ll_BFu7s) C1{ Fs:9 FL:16 Fs:7}



static void Test_BFu9s_BFu16ll_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu7s");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu16ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu9s_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu16ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu7s, BFu9s_BFu16ll_BFu7s)
//============================================================================


struct  BFu9s_BFu16ll_BFu8c  {
  unsigned short v1:9;
  __tsu64 v2:16;
  unsigned char v3:8;
};
//SIG(1 BFu9s_BFu16ll_BFu8c) C1{ Fs:9 FL:16 Fc:8}



static void Test_BFu9s_BFu16ll_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu8c");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu16ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu8c, BFu9s_BFu16ll_BFu8c)
//============================================================================


struct  BFu9s_BFu16ll_BFu8i  {
  unsigned short v1:9;
  __tsu64 v2:16;
  unsigned int v3:8;
};
//SIG(1 BFu9s_BFu16ll_BFu8i) C1{ Fs:9 FL:16 Fi:8}



static void Test_BFu9s_BFu16ll_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu8i");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu16ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu8i, BFu9s_BFu16ll_BFu8i)
//============================================================================


struct  BFu9s_BFu16ll_BFu8ll  {
  unsigned short v1:9;
  __tsu64 v2:16;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_BFu16ll_BFu8ll) C1{ Fs:9 FL:16 FL:8}



static void Test_BFu9s_BFu16ll_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, 1, "BFu9s_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu16ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu8ll, BFu9s_BFu16ll_BFu8ll)
//============================================================================


struct  BFu9s_BFu16ll_BFu8s  {
  unsigned short v1:9;
  __tsu64 v2:16;
  unsigned short v3:8;
};
//SIG(1 BFu9s_BFu16ll_BFu8s) C1{ Fs:9 FL:16 Fs:8}



static void Test_BFu9s_BFu16ll_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu8s");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu16ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu8s, BFu9s_BFu16ll_BFu8s)
//============================================================================


struct  BFu9s_BFu16ll_BFu9i  {
  unsigned short v1:9;
  __tsu64 v2:16;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFu16ll_BFu9i) C1{ Fs:9 FL:16 Fi:9}



static void Test_BFu9s_BFu16ll_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu9i");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu9i, BFu9s_BFu16ll_BFu9i)
//============================================================================


struct  BFu9s_BFu16ll_BFu9ll  {
  unsigned short v1:9;
  __tsu64 v2:16;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFu16ll_BFu9ll) C1{ Fs:9 FL:16 FL:9}



static void Test_BFu9s_BFu16ll_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu9ll, BFu9s_BFu16ll_BFu9ll)
//============================================================================


struct  BFu9s_BFu16ll_BFu9s  {
  unsigned short v1:9;
  __tsu64 v2:16;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFu16ll_BFu9s) C1{ Fs:9 FL:16 Fs:9}



static void Test_BFu9s_BFu16ll_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu9s");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu9s, BFu9s_BFu16ll_BFu9s)
//============================================================================


struct  BFu9s_BFu16ll_C  {
  unsigned short v1:9;
  __tsu64 v2:16;
  char v3;
};
//SIG(1 BFu9s_BFu16ll_C) C1{ Fs:9 FL:16 Fc}



static void Test_BFu9s_BFu16ll_C()
{
  {
    init_simple_test("BFu9s_BFu16ll_C");
    static STRUCT_IF_C BFu9s_BFu16ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_C");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_C");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_C");
    check_field_offset(lv, v3, 4, "BFu9s_BFu16ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_C, BFu9s_BFu16ll_C)
//============================================================================


struct  BFu9s_BFu16ll_D  {
  unsigned short v1:9;
  __tsu64 v2:16;
  double v3;
};
//SIG(1 BFu9s_BFu16ll_D) C1{ Fs:9 FL:16 FL}



static void Test_BFu9s_BFu16ll_D()
{
  {
    init_simple_test("BFu9s_BFu16ll_D");
    static STRUCT_IF_C BFu9s_BFu16ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu16ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_D");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_D");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu16ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_D, BFu9s_BFu16ll_D)
//============================================================================


struct  BFu9s_BFu16ll_F  {
  unsigned short v1:9;
  __tsu64 v2:16;
  float v3;
};
//SIG(1 BFu9s_BFu16ll_F) C1{ Fs:9 FL:16 Fi}



static void Test_BFu9s_BFu16ll_F()
{
  {
    init_simple_test("BFu9s_BFu16ll_F");
    static STRUCT_IF_C BFu9s_BFu16ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_F");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_F");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_F");
    check_field_offset(lv, v3, 4, "BFu9s_BFu16ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_F, BFu9s_BFu16ll_F)
//============================================================================


struct  BFu9s_BFu16ll_I  {
  unsigned short v1:9;
  __tsu64 v2:16;
  int v3;
};
//SIG(1 BFu9s_BFu16ll_I) C1{ Fs:9 FL:16 Fi}



static void Test_BFu9s_BFu16ll_I()
{
  {
    init_simple_test("BFu9s_BFu16ll_I");
    static STRUCT_IF_C BFu9s_BFu16ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_I");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_I");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_I");
    check_field_offset(lv, v3, 4, "BFu9s_BFu16ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_I, BFu9s_BFu16ll_I)
//============================================================================


struct  BFu9s_BFu16ll_Ip  {
  unsigned short v1:9;
  __tsu64 v2:16;
  int *v3;
};
//SIG(1 BFu9s_BFu16ll_Ip) C1{ Fs:9 FL:16 Fp}



static void Test_BFu9s_BFu16ll_Ip()
{
  {
    init_simple_test("BFu9s_BFu16ll_Ip");
    static STRUCT_IF_C BFu9s_BFu16ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu16ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_Ip");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_Ip");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu16ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_Ip, BFu9s_BFu16ll_Ip)
//============================================================================


struct  BFu9s_BFu16ll_L  {
  unsigned short v1:9;
  __tsu64 v2:16;
  __tsi64 v3;
};
//SIG(1 BFu9s_BFu16ll_L) C1{ Fs:9 FL:16 FL}



static void Test_BFu9s_BFu16ll_L()
{
  {
    init_simple_test("BFu9s_BFu16ll_L");
    static STRUCT_IF_C BFu9s_BFu16ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu16ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_L");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_L");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu16ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_L, BFu9s_BFu16ll_L)
//============================================================================


struct  BFu9s_BFu16ll_S  {
  unsigned short v1:9;
  __tsu64 v2:16;
  short v3;
};
//SIG(1 BFu9s_BFu16ll_S) C1{ Fs:9 FL:16 Fs}



static void Test_BFu9s_BFu16ll_S()
{
  {
    init_simple_test("BFu9s_BFu16ll_S");
    static STRUCT_IF_C BFu9s_BFu16ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_S");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_S");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_S");
    check_field_offset(lv, v3, 4, "BFu9s_BFu16ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_S, BFu9s_BFu16ll_S)
//============================================================================


struct  BFu9s_BFu16ll_Uc  {
  unsigned short v1:9;
  __tsu64 v2:16;
  unsigned char v3;
};
//SIG(1 BFu9s_BFu16ll_Uc) C1{ Fs:9 FL:16 Fc}



static void Test_BFu9s_BFu16ll_Uc()
{
  {
    init_simple_test("BFu9s_BFu16ll_Uc");
    static STRUCT_IF_C BFu9s_BFu16ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_Uc");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_Uc");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_Uc");
    check_field_offset(lv, v3, 4, "BFu9s_BFu16ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_Uc, BFu9s_BFu16ll_Uc)
//============================================================================


struct  BFu9s_BFu16ll_Ui  {
  unsigned short v1:9;
  __tsu64 v2:16;
  unsigned int v3;
};
//SIG(1 BFu9s_BFu16ll_Ui) C1{ Fs:9 FL:16 Fi}



static void Test_BFu9s_BFu16ll_Ui()
{
  {
    init_simple_test("BFu9s_BFu16ll_Ui");
    static STRUCT_IF_C BFu9s_BFu16ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_Ui");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_Ui");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_Ui");
    check_field_offset(lv, v3, 4, "BFu9s_BFu16ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_Ui, BFu9s_BFu16ll_Ui)
//============================================================================


struct  BFu9s_BFu16ll_Ul  {
  unsigned short v1:9;
  __tsu64 v2:16;
  __tsu64 v3;
};
//SIG(1 BFu9s_BFu16ll_Ul) C1{ Fs:9 FL:16 FL}



static void Test_BFu9s_BFu16ll_Ul()
{
  {
    init_simple_test("BFu9s_BFu16ll_Ul");
    static STRUCT_IF_C BFu9s_BFu16ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu16ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_Ul");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_Ul");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu16ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_Ul, BFu9s_BFu16ll_Ul)
//============================================================================


struct  BFu9s_BFu16ll_Us  {
  unsigned short v1:9;
  __tsu64 v2:16;
  unsigned short v3;
};
//SIG(1 BFu9s_BFu16ll_Us) C1{ Fs:9 FL:16 Fs}



static void Test_BFu9s_BFu16ll_Us()
{
  {
    init_simple_test("BFu9s_BFu16ll_Us");
    static STRUCT_IF_C BFu9s_BFu16ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_Us");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_Us");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_Us");
    check_field_offset(lv, v3, 4, "BFu9s_BFu16ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_Us, BFu9s_BFu16ll_Us)
//============================================================================


struct  BFu9s_BFu16ll_Vp  {
  unsigned short v1:9;
  __tsu64 v2:16;
  void *v3;
};
//SIG(1 BFu9s_BFu16ll_Vp) C1{ Fs:9 FL:16 Fp}



static void Test_BFu9s_BFu16ll_Vp()
{
  {
    init_simple_test("BFu9s_BFu16ll_Vp");
    static STRUCT_IF_C BFu9s_BFu16ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu16ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_Vp");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_Vp");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu16ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_Vp, BFu9s_BFu16ll_Vp)
//============================================================================


struct  BFu9s_BFu16s  {
  unsigned short v1:9;
  unsigned short v2:16;
};
//SIG(1 BFu9s_BFu16s) C1{ Fs:9 Fs:16}



static void Test_BFu9s_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu16s");
    static STRUCT_IF_C BFu9s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s, BFu9s_BFu16s)
//============================================================================


struct  BFu9s_BFu16s_BFu15i  {
  unsigned short v1:9;
  unsigned short v2:16;
  unsigned int v3:15;
};
//SIG(1 BFu9s_BFu16s_BFu15i) C1{ Fs:9 Fs:16 Fi:15}



static void Test_BFu9s_BFu16s_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu15i");
    static STRUCT_IF_C BFu9s_BFu16s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu16s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu15i, BFu9s_BFu16s_BFu15i)
//============================================================================


struct  BFu9s_BFu16s_BFu15ll  {
  unsigned short v1:9;
  unsigned short v2:16;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_BFu16s_BFu15ll) C1{ Fs:9 Fs:16 FL:15}



static void Test_BFu9s_BFu16s_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu16s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu16s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu15ll, BFu9s_BFu16s_BFu15ll)
//============================================================================


struct  BFu9s_BFu16s_BFu15s  {
  unsigned short v1:9;
  unsigned short v2:16;
  unsigned short v3:15;
};
//SIG(1 BFu9s_BFu16s_BFu15s) C1{ Fs:9 Fs:16 Fs:15}



static void Test_BFu9s_BFu16s_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu15s");
    static STRUCT_IF_C BFu9s_BFu16s_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu16s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu16s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu16s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu15s, BFu9s_BFu16s_BFu15s)
//============================================================================


struct  BFu9s_BFu16s_BFu16i  {
  unsigned short v1:9;
  unsigned short v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu9s_BFu16s_BFu16i) C1{ Fs:9 Fs:16 Fi:16}



static void Test_BFu9s_BFu16s_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu16i");
    static STRUCT_IF_C BFu9s_BFu16s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu16i, BFu9s_BFu16s_BFu16i)
//============================================================================


struct  BFu9s_BFu16s_BFu16ll  {
  unsigned short v1:9;
  unsigned short v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_BFu16s_BFu16ll) C1{ Fs:9 Fs:16 FL:16}



static void Test_BFu9s_BFu16s_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu16s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu16ll, BFu9s_BFu16s_BFu16ll)
//============================================================================


struct  BFu9s_BFu16s_BFu16s  {
  unsigned short v1:9;
  unsigned short v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu9s_BFu16s_BFu16s) C1{ Fs:9 Fs:16 Fs:16}



static void Test_BFu9s_BFu16s_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu16s");
    static STRUCT_IF_C BFu9s_BFu16s_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu16s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu16s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu16s, BFu9s_BFu16s_BFu16s)
//============================================================================


struct  BFu9s_BFu16s_BFu17i  {
  unsigned short v1:9;
  unsigned short v2:16;
  unsigned int v3:17;
};
//SIG(1 BFu9s_BFu16s_BFu17i) C1{ Fs:9 Fs:16 Fi:17}



static void Test_BFu9s_BFu16s_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu17i");
    static STRUCT_IF_C BFu9s_BFu16s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu9s_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu16s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu17i, BFu9s_BFu16s_BFu17i)
//============================================================================


struct  BFu9s_BFu16s_BFu17ll  {
  unsigned short v1:9;
  unsigned short v2:16;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_BFu16s_BFu17ll) C1{ Fs:9 Fs:16 FL:17}



static void Test_BFu9s_BFu16s_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu16s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu9s_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu16s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu17ll, BFu9s_BFu16s_BFu17ll)
//============================================================================


struct  BFu9s_BFu16s_BFu1c  {
  unsigned short v1:9;
  unsigned short v2:16;
  unsigned char v3:1;
};
//SIG(1 BFu9s_BFu16s_BFu1c) C1{ Fs:9 Fs:16 Fc:1}



static void Test_BFu9s_BFu16s_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu1c");
    static STRUCT_IF_C BFu9s_BFu16s_BFu1c lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu16s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu16s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu9s_BFu16s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu1c, BFu9s_BFu16s_BFu1c)
//============================================================================


struct  BFu9s_BFu16s_BFu1i  {
  unsigned short v1:9;
  unsigned short v2:16;
  unsigned int v3:1;
};
//SIG(1 BFu9s_BFu16s_BFu1i) C1{ Fs:9 Fs:16 Fi:1}



static void Test_BFu9s_BFu16s_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu1i");
    static STRUCT_IF_C BFu9s_BFu16s_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu9s_BFu16s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu1i, BFu9s_BFu16s_BFu1i)
//============================================================================


struct  BFu9s_BFu16s_BFu1ll  {
  unsigned short v1:9;
  unsigned short v2:16;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_BFu16s_BFu1ll) C1{ Fs:9 Fs:16 FL:1}



static void Test_BFu9s_BFu16s_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu16s_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu9s_BFu16s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu1ll, BFu9s_BFu16s_BFu1ll)
//============================================================================


struct  BFu9s_BFu16s_BFu1s  {
  unsigned short v1:9;
  unsigned short v2:16;
  unsigned short v3:1;
};
//SIG(1 BFu9s_BFu16s_BFu1s) C1{ Fs:9 Fs:16 Fs:1}



static void Test_BFu9s_BFu16s_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu1s");
    static STRUCT_IF_C BFu9s_BFu16s_BFu1s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu16s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu16s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu9s_BFu16s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu1s, BFu9s_BFu16s_BFu1s)
//============================================================================


struct  BFu9s_BFu16s_BFu31i  {
  unsigned short v1:9;
  unsigned short v2:16;
  unsigned int v3:31;
};
//SIG(1 BFu9s_BFu16s_BFu31i) C1{ Fs:9 Fs:16 Fi:31}



static void Test_BFu9s_BFu16s_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu31i");
    static STRUCT_IF_C BFu9s_BFu16s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu16s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu31i, BFu9s_BFu16s_BFu31i)
//============================================================================


struct  BFu9s_BFu16s_BFu31ll  {
  unsigned short v1:9;
  unsigned short v2:16;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_BFu16s_BFu31ll) C1{ Fs:9 Fs:16 FL:31}



static void Test_BFu9s_BFu16s_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu16s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu16s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu31ll, BFu9s_BFu16s_BFu31ll)
//============================================================================


struct  BFu9s_BFu16s_BFu32i  {
  unsigned short v1:9;
  unsigned short v2:16;
  unsigned int v3:32;
};
//SIG(1 BFu9s_BFu16s_BFu32i) C1{ Fs:9 Fs:16 Fi:32}



static void Test_BFu9s_BFu16s_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu32i");
    static STRUCT_IF_C BFu9s_BFu16s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu16s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu32i, BFu9s_BFu16s_BFu32i)
//============================================================================


struct  BFu9s_BFu16s_BFu32ll  {
  unsigned short v1:9;
  unsigned short v2:16;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_BFu16s_BFu32ll) C1{ Fs:9 Fs:16 FL:32}



static void Test_BFu9s_BFu16s_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu16s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu16s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu32ll, BFu9s_BFu16s_BFu32ll)
//============================================================================


struct  BFu9s_BFu16s_BFu33  {
  unsigned short v1:9;
  unsigned short v2:16;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_BFu16s_BFu33) C1{ Fs:9 Fs:16 FL:33}



static void Test_BFu9s_BFu16s_BFu33()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu33");
    static STRUCT_IF_C BFu9s_BFu16s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu16s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu9s_BFu16s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu9s_BFu16s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu33, BFu9s_BFu16s_BFu33)
//============================================================================


struct  BFu9s_BFu16s_BFu7c  {
  unsigned short v1:9;
  unsigned short v2:16;
  unsigned char v3:7;
};
//SIG(1 BFu9s_BFu16s_BFu7c) C1{ Fs:9 Fs:16 Fc:7}



static void Test_BFu9s_BFu16s_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu7c");
    static STRUCT_IF_C BFu9s_BFu16s_BFu7c lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu16s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu16s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu9s_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu16s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu7c, BFu9s_BFu16s_BFu7c)
//============================================================================


struct  BFu9s_BFu16s_BFu7i  {
  unsigned short v1:9;
  unsigned short v2:16;
  unsigned int v3:7;
};
//SIG(1 BFu9s_BFu16s_BFu7i) C1{ Fs:9 Fs:16 Fi:7}



static void Test_BFu9s_BFu16s_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu7i");
    static STRUCT_IF_C BFu9s_BFu16s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu9s_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu16s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu7i, BFu9s_BFu16s_BFu7i)
//============================================================================


struct  BFu9s_BFu16s_BFu7ll  {
  unsigned short v1:9;
  unsigned short v2:16;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_BFu16s_BFu7ll) C1{ Fs:9 Fs:16 FL:7}



static void Test_BFu9s_BFu16s_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu16s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu9s_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu16s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu7ll, BFu9s_BFu16s_BFu7ll)
//============================================================================


struct  BFu9s_BFu16s_BFu7s  {
  unsigned short v1:9;
  unsigned short v2:16;
  unsigned short v3:7;
};
//SIG(1 BFu9s_BFu16s_BFu7s) C1{ Fs:9 Fs:16 Fs:7}



static void Test_BFu9s_BFu16s_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu7s");
    static STRUCT_IF_C BFu9s_BFu16s_BFu7s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu16s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu16s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu9s_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu16s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu7s, BFu9s_BFu16s_BFu7s)
//============================================================================


struct  BFu9s_BFu16s_BFu8c  {
  unsigned short v1:9;
  unsigned short v2:16;
  unsigned char v3:8;
};
//SIG(1 BFu9s_BFu16s_BFu8c) C1{ Fs:9 Fs:16 Fc:8}



static void Test_BFu9s_BFu16s_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu8c");
    static STRUCT_IF_C BFu9s_BFu16s_BFu8c lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu16s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu16s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu16s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu8c, BFu9s_BFu16s_BFu8c)
//============================================================================


struct  BFu9s_BFu16s_BFu8i  {
  unsigned short v1:9;
  unsigned short v2:16;
  unsigned int v3:8;
};
//SIG(1 BFu9s_BFu16s_BFu8i) C1{ Fs:9 Fs:16 Fi:8}



static void Test_BFu9s_BFu16s_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu8i");
    static STRUCT_IF_C BFu9s_BFu16s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu16s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu8i, BFu9s_BFu16s_BFu8i)
//============================================================================


struct  BFu9s_BFu16s_BFu8ll  {
  unsigned short v1:9;
  unsigned short v2:16;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_BFu16s_BFu8ll) C1{ Fs:9 Fs:16 FL:8}



static void Test_BFu9s_BFu16s_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu16s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu16s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu8ll, BFu9s_BFu16s_BFu8ll)
//============================================================================


struct  BFu9s_BFu16s_BFu8s  {
  unsigned short v1:9;
  unsigned short v2:16;
  unsigned short v3:8;
};
//SIG(1 BFu9s_BFu16s_BFu8s) C1{ Fs:9 Fs:16 Fs:8}



static void Test_BFu9s_BFu16s_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu8s");
    static STRUCT_IF_C BFu9s_BFu16s_BFu8s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu16s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu16s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu16s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu8s, BFu9s_BFu16s_BFu8s)
//============================================================================


struct  BFu9s_BFu16s_BFu9i  {
  unsigned short v1:9;
  unsigned short v2:16;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFu16s_BFu9i) C1{ Fs:9 Fs:16 Fi:9}



static void Test_BFu9s_BFu16s_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu9i");
    static STRUCT_IF_C BFu9s_BFu16s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu9i, BFu9s_BFu16s_BFu9i)
//============================================================================


struct  BFu9s_BFu16s_BFu9ll  {
  unsigned short v1:9;
  unsigned short v2:16;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFu16s_BFu9ll) C1{ Fs:9 Fs:16 FL:9}



static void Test_BFu9s_BFu16s_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu16s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu9ll, BFu9s_BFu16s_BFu9ll)
//============================================================================


struct  BFu9s_BFu16s_BFu9s  {
  unsigned short v1:9;
  unsigned short v2:16;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFu16s_BFu9s) C1{ Fs:9 Fs:16 Fs:9}



static void Test_BFu9s_BFu16s_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu9s");
    static STRUCT_IF_C BFu9s_BFu16s_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu16s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu16s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu9s, BFu9s_BFu16s_BFu9s)
//============================================================================


struct  BFu9s_BFu16s_C  {
  unsigned short v1:9;
  unsigned short v2:16;
  char v3;
};
//SIG(1 BFu9s_BFu16s_C) C1{ Fs:9 Fs:16 Fc}



static void Test_BFu9s_BFu16s_C()
{
  {
    init_simple_test("BFu9s_BFu16s_C");
    static STRUCT_IF_C BFu9s_BFu16s_C lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu16s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu16s_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_C");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_C");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_C");
    check_field_offset(lv, v3, 4, "BFu9s_BFu16s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_C, BFu9s_BFu16s_C)
//============================================================================


struct  BFu9s_BFu16s_D  {
  unsigned short v1:9;
  unsigned short v2:16;
  double v3;
};
//SIG(1 BFu9s_BFu16s_D) C1{ Fs:9 Fs:16 FL}



static void Test_BFu9s_BFu16s_D()
{
  {
    init_simple_test("BFu9s_BFu16s_D");
    static STRUCT_IF_C BFu9s_BFu16s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu16s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16s_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_D");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_D");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu16s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_D, BFu9s_BFu16s_D)
//============================================================================


struct  BFu9s_BFu16s_F  {
  unsigned short v1:9;
  unsigned short v2:16;
  float v3;
};
//SIG(1 BFu9s_BFu16s_F) C1{ Fs:9 Fs:16 Fi}



static void Test_BFu9s_BFu16s_F()
{
  {
    init_simple_test("BFu9s_BFu16s_F");
    static STRUCT_IF_C BFu9s_BFu16s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16s_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_F");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_F");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_F");
    check_field_offset(lv, v3, 4, "BFu9s_BFu16s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_F, BFu9s_BFu16s_F)
//============================================================================


struct  BFu9s_BFu16s_I  {
  unsigned short v1:9;
  unsigned short v2:16;
  int v3;
};
//SIG(1 BFu9s_BFu16s_I) C1{ Fs:9 Fs:16 Fi}



static void Test_BFu9s_BFu16s_I()
{
  {
    init_simple_test("BFu9s_BFu16s_I");
    static STRUCT_IF_C BFu9s_BFu16s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16s_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_I");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_I");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_I");
    check_field_offset(lv, v3, 4, "BFu9s_BFu16s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_I, BFu9s_BFu16s_I)
//============================================================================


struct  BFu9s_BFu16s_Ip  {
  unsigned short v1:9;
  unsigned short v2:16;
  int *v3;
};
//SIG(1 BFu9s_BFu16s_Ip) C1{ Fs:9 Fs:16 Fp}



static void Test_BFu9s_BFu16s_Ip()
{
  {
    init_simple_test("BFu9s_BFu16s_Ip");
    static STRUCT_IF_C BFu9s_BFu16s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu16s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu16s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_Ip, BFu9s_BFu16s_Ip)
//============================================================================


struct  BFu9s_BFu16s_L  {
  unsigned short v1:9;
  unsigned short v2:16;
  __tsi64 v3;
};
//SIG(1 BFu9s_BFu16s_L) C1{ Fs:9 Fs:16 FL}



static void Test_BFu9s_BFu16s_L()
{
  {
    init_simple_test("BFu9s_BFu16s_L");
    static STRUCT_IF_C BFu9s_BFu16s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu16s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16s_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_L");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_L");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu16s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_L, BFu9s_BFu16s_L)
//============================================================================


struct  BFu9s_BFu16s_S  {
  unsigned short v1:9;
  unsigned short v2:16;
  short v3;
};
//SIG(1 BFu9s_BFu16s_S) C1{ Fs:9 Fs:16 Fs}



static void Test_BFu9s_BFu16s_S()
{
  {
    init_simple_test("BFu9s_BFu16s_S");
    static STRUCT_IF_C BFu9s_BFu16s_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu16s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu16s_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_S");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_S");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_S");
    check_field_offset(lv, v3, 4, "BFu9s_BFu16s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_S, BFu9s_BFu16s_S)
//============================================================================


struct  BFu9s_BFu16s_Uc  {
  unsigned short v1:9;
  unsigned short v2:16;
  unsigned char v3;
};
//SIG(1 BFu9s_BFu16s_Uc) C1{ Fs:9 Fs:16 Fc}



static void Test_BFu9s_BFu16s_Uc()
{
  {
    init_simple_test("BFu9s_BFu16s_Uc");
    static STRUCT_IF_C BFu9s_BFu16s_Uc lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu16s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu16s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_Uc");
    check_field_offset(lv, v3, 4, "BFu9s_BFu16s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_Uc, BFu9s_BFu16s_Uc)
//============================================================================


struct  BFu9s_BFu16s_Ui  {
  unsigned short v1:9;
  unsigned short v2:16;
  unsigned int v3;
};
//SIG(1 BFu9s_BFu16s_Ui) C1{ Fs:9 Fs:16 Fi}



static void Test_BFu9s_BFu16s_Ui()
{
  {
    init_simple_test("BFu9s_BFu16s_Ui");
    static STRUCT_IF_C BFu9s_BFu16s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu16s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_Ui");
    check_field_offset(lv, v3, 4, "BFu9s_BFu16s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_Ui, BFu9s_BFu16s_Ui)
//============================================================================


struct  BFu9s_BFu16s_Ul  {
  unsigned short v1:9;
  unsigned short v2:16;
  __tsu64 v3;
};
//SIG(1 BFu9s_BFu16s_Ul) C1{ Fs:9 Fs:16 FL}



static void Test_BFu9s_BFu16s_Ul()
{
  {
    init_simple_test("BFu9s_BFu16s_Ul");
    static STRUCT_IF_C BFu9s_BFu16s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu16s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu16s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_Ul, BFu9s_BFu16s_Ul)
//============================================================================


struct  BFu9s_BFu16s_Us  {
  unsigned short v1:9;
  unsigned short v2:16;
  unsigned short v3;
};
//SIG(1 BFu9s_BFu16s_Us) C1{ Fs:9 Fs:16 Fs}



static void Test_BFu9s_BFu16s_Us()
{
  {
    init_simple_test("BFu9s_BFu16s_Us");
    static STRUCT_IF_C BFu9s_BFu16s_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu16s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu16s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_Us");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_Us");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_Us");
    check_field_offset(lv, v3, 4, "BFu9s_BFu16s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_Us, BFu9s_BFu16s_Us)
//============================================================================


struct  BFu9s_BFu16s_Vp  {
  unsigned short v1:9;
  unsigned short v2:16;
  void *v3;
};
//SIG(1 BFu9s_BFu16s_Vp) C1{ Fs:9 Fs:16 Fp}



static void Test_BFu9s_BFu16s_Vp()
{
  {
    init_simple_test("BFu9s_BFu16s_Vp");
    static STRUCT_IF_C BFu9s_BFu16s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu16s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu16s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_Vp, BFu9s_BFu16s_Vp)
//============================================================================


struct  BFu9s_BFu17i  {
  unsigned short v1:9;
  unsigned int v2:17;
};
//SIG(1 BFu9s_BFu17i) C1{ Fs:9 Fi:17}



static void Test_BFu9s_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu17i");
    static STRUCT_IF_C BFu9s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i, BFu9s_BFu17i)
//============================================================================


struct  BFu9s_BFu17i_BFu15i  {
  unsigned short v1:9;
  unsigned int v2:17;
  unsigned int v3:15;
};
//SIG(1 BFu9s_BFu17i_BFu15i) C1{ Fs:9 Fi:17 Fi:15}



static void Test_BFu9s_BFu17i_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu15i");
    static STRUCT_IF_C BFu9s_BFu17i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu17i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu15i, BFu9s_BFu17i_BFu15i)
//============================================================================


struct  BFu9s_BFu17i_BFu15ll  {
  unsigned short v1:9;
  unsigned int v2:17;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_BFu17i_BFu15ll) C1{ Fs:9 Fi:17 FL:15}



static void Test_BFu9s_BFu17i_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu17i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 2, 15, 1, "BFu9s_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 2, 15, hide_ull(1LL<<14), "BFu9s_BFu17i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu15ll, BFu9s_BFu17i_BFu15ll)
//============================================================================


struct  BFu9s_BFu17i_BFu15s  {
  unsigned short v1:9;
  unsigned int v2:17;
  unsigned short v3:15;
};
//SIG(1 BFu9s_BFu17i_BFu15s) C1{ Fs:9 Fi:17 Fs:15}



static void Test_BFu9s_BFu17i_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu15s");
    static STRUCT_IF_C BFu9s_BFu17i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu17i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu15s, BFu9s_BFu17i_BFu15s)
//============================================================================


struct  BFu9s_BFu17i_BFu16i  {
  unsigned short v1:9;
  unsigned int v2:17;
  unsigned int v3:16;
};
//SIG(1 BFu9s_BFu17i_BFu16i) C1{ Fs:9 Fi:17 Fi:16}



static void Test_BFu9s_BFu17i_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu16i");
    static STRUCT_IF_C BFu9s_BFu17i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu17i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu16i, BFu9s_BFu17i_BFu16i)
//============================================================================


struct  BFu9s_BFu17i_BFu16ll  {
  unsigned short v1:9;
  unsigned int v2:17;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_BFu17i_BFu16ll) C1{ Fs:9 Fi:17 FL:16}



static void Test_BFu9s_BFu17i_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu17i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 2, 16, 1, "BFu9s_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 2, 16, hide_ull(1LL<<15), "BFu9s_BFu17i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu16ll, BFu9s_BFu17i_BFu16ll)
//============================================================================


struct  BFu9s_BFu17i_BFu16s  {
  unsigned short v1:9;
  unsigned int v2:17;
  unsigned short v3:16;
};
//SIG(1 BFu9s_BFu17i_BFu16s) C1{ Fs:9 Fi:17 Fs:16}



static void Test_BFu9s_BFu17i_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu16s");
    static STRUCT_IF_C BFu9s_BFu17i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu17i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu16s, BFu9s_BFu17i_BFu16s)
//============================================================================


struct  BFu9s_BFu17i_BFu17i  {
  unsigned short v1:9;
  unsigned int v2:17;
  unsigned int v3:17;
};
//SIG(1 BFu9s_BFu17i_BFu17i) C1{ Fs:9 Fi:17 Fi:17}



static void Test_BFu9s_BFu17i_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu17i");
    static STRUCT_IF_C BFu9s_BFu17i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu9s_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu17i, BFu9s_BFu17i_BFu17i)
//============================================================================


struct  BFu9s_BFu17i_BFu17ll  {
  unsigned short v1:9;
  unsigned int v2:17;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_BFu17i_BFu17ll) C1{ Fs:9 Fi:17 FL:17}



static void Test_BFu9s_BFu17i_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu17i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 2, 17, 1, "BFu9s_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 2, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu17ll, BFu9s_BFu17i_BFu17ll)
//============================================================================


struct  BFu9s_BFu17i_BFu1c  {
  unsigned short v1:9;
  unsigned int v2:17;
  unsigned char v3:1;
};
//SIG(1 BFu9s_BFu17i_BFu1c) C1{ Fs:9 Fi:17 Fc:1}



static void Test_BFu9s_BFu17i_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu1c");
    static STRUCT_IF_C BFu9s_BFu17i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu17i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu1c");
    set_bf_and_test(lv, v3, 3, 2, 1, 1, "BFu9s_BFu17i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu1c, BFu9s_BFu17i_BFu1c)
//============================================================================


struct  BFu9s_BFu17i_BFu1i  {
  unsigned short v1:9;
  unsigned int v2:17;
  unsigned int v3:1;
};
//SIG(1 BFu9s_BFu17i_BFu1i) C1{ Fs:9 Fi:17 Fi:1}



static void Test_BFu9s_BFu17i_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu1i");
    static STRUCT_IF_C BFu9s_BFu17i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu17i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu1i");
    set_bf_and_test(lv, v3, 3, 2, 1, 1, "BFu9s_BFu17i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu1i, BFu9s_BFu17i_BFu1i)
//============================================================================


struct  BFu9s_BFu17i_BFu1ll  {
  unsigned short v1:9;
  unsigned int v2:17;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_BFu17i_BFu1ll) C1{ Fs:9 Fi:17 FL:1}



static void Test_BFu9s_BFu17i_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu17i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu17i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu1ll");
    set_bf_and_test(lv, v3, 3, 2, 1, 1, "BFu9s_BFu17i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu1ll, BFu9s_BFu17i_BFu1ll)
//============================================================================


struct  BFu9s_BFu17i_BFu1s  {
  unsigned short v1:9;
  unsigned int v2:17;
  unsigned short v3:1;
};
//SIG(1 BFu9s_BFu17i_BFu1s) C1{ Fs:9 Fi:17 Fs:1}



static void Test_BFu9s_BFu17i_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu1s");
    static STRUCT_IF_C BFu9s_BFu17i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu17i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu1s");
    set_bf_and_test(lv, v3, 3, 2, 1, 1, "BFu9s_BFu17i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu1s, BFu9s_BFu17i_BFu1s)
//============================================================================


struct  BFu9s_BFu17i_BFu31i  {
  unsigned short v1:9;
  unsigned int v2:17;
  unsigned int v3:31;
};
//SIG(1 BFu9s_BFu17i_BFu31i) C1{ Fs:9 Fi:17 Fi:31}



static void Test_BFu9s_BFu17i_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu31i");
    static STRUCT_IF_C BFu9s_BFu17i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu17i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu31i, BFu9s_BFu17i_BFu31i)
//============================================================================


struct  BFu9s_BFu17i_BFu31ll  {
  unsigned short v1:9;
  unsigned int v2:17;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_BFu17i_BFu31ll) C1{ Fs:9 Fi:17 FL:31}



static void Test_BFu9s_BFu17i_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu17i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 2, 31, 1, "BFu9s_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 2, 31, hide_ull(1LL<<30), "BFu9s_BFu17i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu31ll, BFu9s_BFu17i_BFu31ll)
//============================================================================


struct  BFu9s_BFu17i_BFu32i  {
  unsigned short v1:9;
  unsigned int v2:17;
  unsigned int v3:32;
};
//SIG(1 BFu9s_BFu17i_BFu32i) C1{ Fs:9 Fi:17 Fi:32}



static void Test_BFu9s_BFu17i_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu32i");
    static STRUCT_IF_C BFu9s_BFu17i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu17i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu32i, BFu9s_BFu17i_BFu32i)
//============================================================================


struct  BFu9s_BFu17i_BFu32ll  {
  unsigned short v1:9;
  unsigned int v2:17;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_BFu17i_BFu32ll) C1{ Fs:9 Fi:17 FL:32}



static void Test_BFu9s_BFu17i_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu17i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 2, 32, 1, "BFu9s_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 2, 32, hide_ull(1LL<<31), "BFu9s_BFu17i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu32ll, BFu9s_BFu17i_BFu32ll)
//============================================================================


struct  BFu9s_BFu17i_BFu33  {
  unsigned short v1:9;
  unsigned int v2:17;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_BFu17i_BFu33) C1{ Fs:9 Fi:17 FL:33}



static void Test_BFu9s_BFu17i_BFu33()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu33");
    static STRUCT_IF_C BFu9s_BFu17i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu33");
    set_bf_and_test(lv, v3, 3, 2, 33, 1, "BFu9s_BFu17i_BFu33");
    set_bf_and_test(lv, v3, 3, 2, 33, hide_ull(1LL<<32), "BFu9s_BFu17i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu33, BFu9s_BFu17i_BFu33)
//============================================================================


struct  BFu9s_BFu17i_BFu7c  {
  unsigned short v1:9;
  unsigned int v2:17;
  unsigned char v3:7;
};
//SIG(1 BFu9s_BFu17i_BFu7c) C1{ Fs:9 Fi:17 Fc:7}



static void Test_BFu9s_BFu17i_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu7c");
    static STRUCT_IF_C BFu9s_BFu17i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu9s_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu17i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu7c, BFu9s_BFu17i_BFu7c)
//============================================================================


struct  BFu9s_BFu17i_BFu7i  {
  unsigned short v1:9;
  unsigned int v2:17;
  unsigned int v3:7;
};
//SIG(1 BFu9s_BFu17i_BFu7i) C1{ Fs:9 Fi:17 Fi:7}



static void Test_BFu9s_BFu17i_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu7i");
    static STRUCT_IF_C BFu9s_BFu17i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu9s_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu17i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu7i, BFu9s_BFu17i_BFu7i)
//============================================================================


struct  BFu9s_BFu17i_BFu7ll  {
  unsigned short v1:9;
  unsigned int v2:17;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_BFu17i_BFu7ll) C1{ Fs:9 Fi:17 FL:7}



static void Test_BFu9s_BFu17i_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu17i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 2, 7, 1, "BFu9s_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 2, 7, hide_ull(1LL<<6), "BFu9s_BFu17i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu7ll, BFu9s_BFu17i_BFu7ll)
//============================================================================


struct  BFu9s_BFu17i_BFu7s  {
  unsigned short v1:9;
  unsigned int v2:17;
  unsigned short v3:7;
};
//SIG(1 BFu9s_BFu17i_BFu7s) C1{ Fs:9 Fi:17 Fs:7}



static void Test_BFu9s_BFu17i_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu7s");
    static STRUCT_IF_C BFu9s_BFu17i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu9s_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu17i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu7s, BFu9s_BFu17i_BFu7s)
//============================================================================


struct  BFu9s_BFu17i_BFu8c  {
  unsigned short v1:9;
  unsigned int v2:17;
  unsigned char v3:8;
};
//SIG(1 BFu9s_BFu17i_BFu8c) C1{ Fs:9 Fi:17 Fc:8}



static void Test_BFu9s_BFu17i_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu8c");
    static STRUCT_IF_C BFu9s_BFu17i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu17i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu8c, BFu9s_BFu17i_BFu8c)
//============================================================================


struct  BFu9s_BFu17i_BFu8i  {
  unsigned short v1:9;
  unsigned int v2:17;
  unsigned int v3:8;
};
//SIG(1 BFu9s_BFu17i_BFu8i) C1{ Fs:9 Fi:17 Fi:8}



static void Test_BFu9s_BFu17i_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu8i");
    static STRUCT_IF_C BFu9s_BFu17i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu17i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu8i, BFu9s_BFu17i_BFu8i)
//============================================================================


struct  BFu9s_BFu17i_BFu8ll  {
  unsigned short v1:9;
  unsigned int v2:17;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_BFu17i_BFu8ll) C1{ Fs:9 Fi:17 FL:8}



static void Test_BFu9s_BFu17i_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu17i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 2, 8, 1, "BFu9s_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 2, 8, hide_ull(1LL<<7), "BFu9s_BFu17i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu8ll, BFu9s_BFu17i_BFu8ll)
//============================================================================


struct  BFu9s_BFu17i_BFu8s  {
  unsigned short v1:9;
  unsigned int v2:17;
  unsigned short v3:8;
};
//SIG(1 BFu9s_BFu17i_BFu8s) C1{ Fs:9 Fi:17 Fs:8}



static void Test_BFu9s_BFu17i_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu8s");
    static STRUCT_IF_C BFu9s_BFu17i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu17i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu8s, BFu9s_BFu17i_BFu8s)
//============================================================================


struct  BFu9s_BFu17i_BFu9i  {
  unsigned short v1:9;
  unsigned int v2:17;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFu17i_BFu9i) C1{ Fs:9 Fi:17 Fi:9}



static void Test_BFu9s_BFu17i_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu9i");
    static STRUCT_IF_C BFu9s_BFu17i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu9i, BFu9s_BFu17i_BFu9i)
//============================================================================


struct  BFu9s_BFu17i_BFu9ll  {
  unsigned short v1:9;
  unsigned int v2:17;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFu17i_BFu9ll) C1{ Fs:9 Fi:17 FL:9}



static void Test_BFu9s_BFu17i_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu17i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 2, 9, 1, "BFu9s_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu9ll, BFu9s_BFu17i_BFu9ll)
//============================================================================


struct  BFu9s_BFu17i_BFu9s  {
  unsigned short v1:9;
  unsigned int v2:17;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFu17i_BFu9s) C1{ Fs:9 Fi:17 Fs:9}



static void Test_BFu9s_BFu17i_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu9s");
    static STRUCT_IF_C BFu9s_BFu17i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu9s, BFu9s_BFu17i_BFu9s)
//============================================================================


struct  BFu9s_BFu17i_C  {
  unsigned short v1:9;
  unsigned int v2:17;
  char v3;
};
//SIG(1 BFu9s_BFu17i_C) C1{ Fs:9 Fi:17 Fc}



static void Test_BFu9s_BFu17i_C()
{
  {
    init_simple_test("BFu9s_BFu17i_C");
    static STRUCT_IF_C BFu9s_BFu17i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_C");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_C");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_C");
    check_field_offset(lv, v3, 4, "BFu9s_BFu17i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_C, BFu9s_BFu17i_C)
//============================================================================


struct  BFu9s_BFu17i_D  {
  unsigned short v1:9;
  unsigned int v2:17;
  double v3;
};
//SIG(1 BFu9s_BFu17i_D) C1{ Fs:9 Fi:17 FL}



static void Test_BFu9s_BFu17i_D()
{
  {
    init_simple_test("BFu9s_BFu17i_D");
    static STRUCT_IF_C BFu9s_BFu17i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu17i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17i_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_D");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_D");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu17i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_D, BFu9s_BFu17i_D)
//============================================================================


struct  BFu9s_BFu17i_F  {
  unsigned short v1:9;
  unsigned int v2:17;
  float v3;
};
//SIG(1 BFu9s_BFu17i_F) C1{ Fs:9 Fi:17 Fi}



static void Test_BFu9s_BFu17i_F()
{
  {
    init_simple_test("BFu9s_BFu17i_F");
    static STRUCT_IF_C BFu9s_BFu17i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_F");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_F");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_F");
    check_field_offset(lv, v3, 4, "BFu9s_BFu17i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_F, BFu9s_BFu17i_F)
//============================================================================


struct  BFu9s_BFu17i_I  {
  unsigned short v1:9;
  unsigned int v2:17;
  int v3;
};
//SIG(1 BFu9s_BFu17i_I) C1{ Fs:9 Fi:17 Fi}



static void Test_BFu9s_BFu17i_I()
{
  {
    init_simple_test("BFu9s_BFu17i_I");
    static STRUCT_IF_C BFu9s_BFu17i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_I");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_I");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_I");
    check_field_offset(lv, v3, 4, "BFu9s_BFu17i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_I, BFu9s_BFu17i_I)
//============================================================================


struct  BFu9s_BFu17i_Ip  {
  unsigned short v1:9;
  unsigned int v2:17;
  int *v3;
};
//SIG(1 BFu9s_BFu17i_Ip) C1{ Fs:9 Fi:17 Fp}



static void Test_BFu9s_BFu17i_Ip()
{
  {
    init_simple_test("BFu9s_BFu17i_Ip");
    static STRUCT_IF_C BFu9s_BFu17i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu17i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_Ip");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_Ip");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu17i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_Ip, BFu9s_BFu17i_Ip)
//============================================================================


struct  BFu9s_BFu17i_L  {
  unsigned short v1:9;
  unsigned int v2:17;
  __tsi64 v3;
};
//SIG(1 BFu9s_BFu17i_L) C1{ Fs:9 Fi:17 FL}



static void Test_BFu9s_BFu17i_L()
{
  {
    init_simple_test("BFu9s_BFu17i_L");
    static STRUCT_IF_C BFu9s_BFu17i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu17i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17i_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_L");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_L");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu17i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_L, BFu9s_BFu17i_L)
//============================================================================


struct  BFu9s_BFu17i_S  {
  unsigned short v1:9;
  unsigned int v2:17;
  short v3;
};
//SIG(1 BFu9s_BFu17i_S) C1{ Fs:9 Fi:17 Fs}



static void Test_BFu9s_BFu17i_S()
{
  {
    init_simple_test("BFu9s_BFu17i_S");
    static STRUCT_IF_C BFu9s_BFu17i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_S");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_S");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_S");
    check_field_offset(lv, v3, 4, "BFu9s_BFu17i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_S, BFu9s_BFu17i_S)
//============================================================================


struct  BFu9s_BFu17i_Uc  {
  unsigned short v1:9;
  unsigned int v2:17;
  unsigned char v3;
};
//SIG(1 BFu9s_BFu17i_Uc) C1{ Fs:9 Fi:17 Fc}



static void Test_BFu9s_BFu17i_Uc()
{
  {
    init_simple_test("BFu9s_BFu17i_Uc");
    static STRUCT_IF_C BFu9s_BFu17i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_Uc");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_Uc");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_Uc");
    check_field_offset(lv, v3, 4, "BFu9s_BFu17i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_Uc, BFu9s_BFu17i_Uc)
//============================================================================


struct  BFu9s_BFu17i_Ui  {
  unsigned short v1:9;
  unsigned int v2:17;
  unsigned int v3;
};
//SIG(1 BFu9s_BFu17i_Ui) C1{ Fs:9 Fi:17 Fi}



static void Test_BFu9s_BFu17i_Ui()
{
  {
    init_simple_test("BFu9s_BFu17i_Ui");
    static STRUCT_IF_C BFu9s_BFu17i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_Ui");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_Ui");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_Ui");
    check_field_offset(lv, v3, 4, "BFu9s_BFu17i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_Ui, BFu9s_BFu17i_Ui)
//============================================================================


struct  BFu9s_BFu17i_Ul  {
  unsigned short v1:9;
  unsigned int v2:17;
  __tsu64 v3;
};
//SIG(1 BFu9s_BFu17i_Ul) C1{ Fs:9 Fi:17 FL}



static void Test_BFu9s_BFu17i_Ul()
{
  {
    init_simple_test("BFu9s_BFu17i_Ul");
    static STRUCT_IF_C BFu9s_BFu17i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu17i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_Ul");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_Ul");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu17i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_Ul, BFu9s_BFu17i_Ul)
//============================================================================


struct  BFu9s_BFu17i_Us  {
  unsigned short v1:9;
  unsigned int v2:17;
  unsigned short v3;
};
//SIG(1 BFu9s_BFu17i_Us) C1{ Fs:9 Fi:17 Fs}



static void Test_BFu9s_BFu17i_Us()
{
  {
    init_simple_test("BFu9s_BFu17i_Us");
    static STRUCT_IF_C BFu9s_BFu17i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_Us");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_Us");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_Us");
    check_field_offset(lv, v3, 4, "BFu9s_BFu17i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_Us, BFu9s_BFu17i_Us)
//============================================================================


struct  BFu9s_BFu17i_Vp  {
  unsigned short v1:9;
  unsigned int v2:17;
  void *v3;
};
//SIG(1 BFu9s_BFu17i_Vp) C1{ Fs:9 Fi:17 Fp}



static void Test_BFu9s_BFu17i_Vp()
{
  {
    init_simple_test("BFu9s_BFu17i_Vp");
    static STRUCT_IF_C BFu9s_BFu17i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu17i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_Vp");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_Vp");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu17i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_Vp, BFu9s_BFu17i_Vp)
//============================================================================


struct  BFu9s_BFu17ll  {
  unsigned short v1:9;
  __tsu64 v2:17;
};
//SIG(1 BFu9s_BFu17ll) C1{ Fs:9 FL:17}



static void Test_BFu9s_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll, BFu9s_BFu17ll)
//============================================================================


struct  BFu9s_BFu17ll_BFu15i  {
  unsigned short v1:9;
  __tsu64 v2:17;
  unsigned int v3:15;
};
//SIG(1 BFu9s_BFu17ll_BFu15i) C1{ Fs:9 FL:17 Fi:15}



static void Test_BFu9s_BFu17ll_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu15i");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu17ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu15i, BFu9s_BFu17ll_BFu15i)
//============================================================================


struct  BFu9s_BFu17ll_BFu15ll  {
  unsigned short v1:9;
  __tsu64 v2:17;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_BFu17ll_BFu15ll) C1{ Fs:9 FL:17 FL:15}



static void Test_BFu9s_BFu17ll_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 2, 15, 1, "BFu9s_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 2, 15, hide_ull(1LL<<14), "BFu9s_BFu17ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu15ll, BFu9s_BFu17ll_BFu15ll)
//============================================================================


struct  BFu9s_BFu17ll_BFu15s  {
  unsigned short v1:9;
  __tsu64 v2:17;
  unsigned short v3:15;
};
//SIG(1 BFu9s_BFu17ll_BFu15s) C1{ Fs:9 FL:17 Fs:15}



static void Test_BFu9s_BFu17ll_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu15s");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu17ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu15s, BFu9s_BFu17ll_BFu15s)
//============================================================================


struct  BFu9s_BFu17ll_BFu16i  {
  unsigned short v1:9;
  __tsu64 v2:17;
  unsigned int v3:16;
};
//SIG(1 BFu9s_BFu17ll_BFu16i) C1{ Fs:9 FL:17 Fi:16}



static void Test_BFu9s_BFu17ll_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu16i");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu17ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu16i, BFu9s_BFu17ll_BFu16i)
//============================================================================


struct  BFu9s_BFu17ll_BFu16ll  {
  unsigned short v1:9;
  __tsu64 v2:17;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_BFu17ll_BFu16ll) C1{ Fs:9 FL:17 FL:16}



static void Test_BFu9s_BFu17ll_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 2, 16, 1, "BFu9s_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 2, 16, hide_ull(1LL<<15), "BFu9s_BFu17ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu16ll, BFu9s_BFu17ll_BFu16ll)
//============================================================================


struct  BFu9s_BFu17ll_BFu16s  {
  unsigned short v1:9;
  __tsu64 v2:17;
  unsigned short v3:16;
};
//SIG(1 BFu9s_BFu17ll_BFu16s) C1{ Fs:9 FL:17 Fs:16}



static void Test_BFu9s_BFu17ll_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu16s");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu17ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu16s, BFu9s_BFu17ll_BFu16s)
//============================================================================


struct  BFu9s_BFu17ll_BFu17i  {
  unsigned short v1:9;
  __tsu64 v2:17;
  unsigned int v3:17;
};
//SIG(1 BFu9s_BFu17ll_BFu17i) C1{ Fs:9 FL:17 Fi:17}



static void Test_BFu9s_BFu17ll_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu17i");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu9s_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu17i, BFu9s_BFu17ll_BFu17i)
//============================================================================


struct  BFu9s_BFu17ll_BFu17ll  {
  unsigned short v1:9;
  __tsu64 v2:17;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_BFu17ll_BFu17ll) C1{ Fs:9 FL:17 FL:17}



static void Test_BFu9s_BFu17ll_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 2, 17, 1, "BFu9s_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 2, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu17ll, BFu9s_BFu17ll_BFu17ll)
//============================================================================


struct  BFu9s_BFu17ll_BFu1c  {
  unsigned short v1:9;
  __tsu64 v2:17;
  unsigned char v3:1;
};
//SIG(1 BFu9s_BFu17ll_BFu1c) C1{ Fs:9 FL:17 Fc:1}



static void Test_BFu9s_BFu17ll_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu1c");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu17ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu1c");
    set_bf_and_test(lv, v3, 3, 2, 1, 1, "BFu9s_BFu17ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu1c, BFu9s_BFu17ll_BFu1c)
//============================================================================


struct  BFu9s_BFu17ll_BFu1i  {
  unsigned short v1:9;
  __tsu64 v2:17;
  unsigned int v3:1;
};
//SIG(1 BFu9s_BFu17ll_BFu1i) C1{ Fs:9 FL:17 Fi:1}



static void Test_BFu9s_BFu17ll_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu1i");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu17ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu1i");
    set_bf_and_test(lv, v3, 3, 2, 1, 1, "BFu9s_BFu17ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu1i, BFu9s_BFu17ll_BFu1i)
//============================================================================


struct  BFu9s_BFu17ll_BFu1ll  {
  unsigned short v1:9;
  __tsu64 v2:17;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_BFu17ll_BFu1ll) C1{ Fs:9 FL:17 FL:1}



static void Test_BFu9s_BFu17ll_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu17ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v3, 3, 2, 1, 1, "BFu9s_BFu17ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu1ll, BFu9s_BFu17ll_BFu1ll)
//============================================================================


struct  BFu9s_BFu17ll_BFu1s  {
  unsigned short v1:9;
  __tsu64 v2:17;
  unsigned short v3:1;
};
//SIG(1 BFu9s_BFu17ll_BFu1s) C1{ Fs:9 FL:17 Fs:1}



static void Test_BFu9s_BFu17ll_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu1s");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu17ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu1s");
    set_bf_and_test(lv, v3, 3, 2, 1, 1, "BFu9s_BFu17ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu1s, BFu9s_BFu17ll_BFu1s)
//============================================================================


struct  BFu9s_BFu17ll_BFu31i  {
  unsigned short v1:9;
  __tsu64 v2:17;
  unsigned int v3:31;
};
//SIG(1 BFu9s_BFu17ll_BFu31i) C1{ Fs:9 FL:17 Fi:31}



static void Test_BFu9s_BFu17ll_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu31i");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu17ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu31i, BFu9s_BFu17ll_BFu31i)
//============================================================================


struct  BFu9s_BFu17ll_BFu31ll  {
  unsigned short v1:9;
  __tsu64 v2:17;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_BFu17ll_BFu31ll) C1{ Fs:9 FL:17 FL:31}



static void Test_BFu9s_BFu17ll_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 2, 31, 1, "BFu9s_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 2, 31, hide_ull(1LL<<30), "BFu9s_BFu17ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu31ll, BFu9s_BFu17ll_BFu31ll)
//============================================================================


struct  BFu9s_BFu17ll_BFu32i  {
  unsigned short v1:9;
  __tsu64 v2:17;
  unsigned int v3:32;
};
//SIG(1 BFu9s_BFu17ll_BFu32i) C1{ Fs:9 FL:17 Fi:32}



static void Test_BFu9s_BFu17ll_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu32i");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu17ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu32i, BFu9s_BFu17ll_BFu32i)
//============================================================================


struct  BFu9s_BFu17ll_BFu32ll  {
  unsigned short v1:9;
  __tsu64 v2:17;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_BFu17ll_BFu32ll) C1{ Fs:9 FL:17 FL:32}



static void Test_BFu9s_BFu17ll_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 2, 32, 1, "BFu9s_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 2, 32, hide_ull(1LL<<31), "BFu9s_BFu17ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu32ll, BFu9s_BFu17ll_BFu32ll)
//============================================================================


struct  BFu9s_BFu17ll_BFu33  {
  unsigned short v1:9;
  __tsu64 v2:17;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_BFu17ll_BFu33) C1{ Fs:9 FL:17 FL:33}



static void Test_BFu9s_BFu17ll_BFu33()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu33");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, 3, 2, 33, 1, "BFu9s_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, 3, 2, 33, hide_ull(1LL<<32), "BFu9s_BFu17ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu33, BFu9s_BFu17ll_BFu33)
//============================================================================


struct  BFu9s_BFu17ll_BFu7c  {
  unsigned short v1:9;
  __tsu64 v2:17;
  unsigned char v3:7;
};
//SIG(1 BFu9s_BFu17ll_BFu7c) C1{ Fs:9 FL:17 Fc:7}



static void Test_BFu9s_BFu17ll_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu7c");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu9s_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu17ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu7c, BFu9s_BFu17ll_BFu7c)
//============================================================================


struct  BFu9s_BFu17ll_BFu7i  {
  unsigned short v1:9;
  __tsu64 v2:17;
  unsigned int v3:7;
};
//SIG(1 BFu9s_BFu17ll_BFu7i) C1{ Fs:9 FL:17 Fi:7}



static void Test_BFu9s_BFu17ll_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu7i");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu9s_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu17ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu7i, BFu9s_BFu17ll_BFu7i)
//============================================================================


struct  BFu9s_BFu17ll_BFu7ll  {
  unsigned short v1:9;
  __tsu64 v2:17;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_BFu17ll_BFu7ll) C1{ Fs:9 FL:17 FL:7}



static void Test_BFu9s_BFu17ll_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 2, 7, 1, "BFu9s_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 2, 7, hide_ull(1LL<<6), "BFu9s_BFu17ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu7ll, BFu9s_BFu17ll_BFu7ll)
//============================================================================


struct  BFu9s_BFu17ll_BFu7s  {
  unsigned short v1:9;
  __tsu64 v2:17;
  unsigned short v3:7;
};
//SIG(1 BFu9s_BFu17ll_BFu7s) C1{ Fs:9 FL:17 Fs:7}



static void Test_BFu9s_BFu17ll_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu7s");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu9s_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu17ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu7s, BFu9s_BFu17ll_BFu7s)
//============================================================================


struct  BFu9s_BFu17ll_BFu8c  {
  unsigned short v1:9;
  __tsu64 v2:17;
  unsigned char v3:8;
};
//SIG(1 BFu9s_BFu17ll_BFu8c) C1{ Fs:9 FL:17 Fc:8}



static void Test_BFu9s_BFu17ll_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu8c");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu17ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu8c, BFu9s_BFu17ll_BFu8c)
//============================================================================


struct  BFu9s_BFu17ll_BFu8i  {
  unsigned short v1:9;
  __tsu64 v2:17;
  unsigned int v3:8;
};
//SIG(1 BFu9s_BFu17ll_BFu8i) C1{ Fs:9 FL:17 Fi:8}



static void Test_BFu9s_BFu17ll_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu8i");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu17ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu8i, BFu9s_BFu17ll_BFu8i)
//============================================================================


struct  BFu9s_BFu17ll_BFu8ll  {
  unsigned short v1:9;
  __tsu64 v2:17;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_BFu17ll_BFu8ll) C1{ Fs:9 FL:17 FL:8}



static void Test_BFu9s_BFu17ll_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 2, 8, 1, "BFu9s_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 2, 8, hide_ull(1LL<<7), "BFu9s_BFu17ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu8ll, BFu9s_BFu17ll_BFu8ll)
//============================================================================


struct  BFu9s_BFu17ll_BFu8s  {
  unsigned short v1:9;
  __tsu64 v2:17;
  unsigned short v3:8;
};
//SIG(1 BFu9s_BFu17ll_BFu8s) C1{ Fs:9 FL:17 Fs:8}



static void Test_BFu9s_BFu17ll_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu8s");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu17ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu8s, BFu9s_BFu17ll_BFu8s)
//============================================================================


struct  BFu9s_BFu17ll_BFu9i  {
  unsigned short v1:9;
  __tsu64 v2:17;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFu17ll_BFu9i) C1{ Fs:9 FL:17 Fi:9}



static void Test_BFu9s_BFu17ll_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu9i");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu9i, BFu9s_BFu17ll_BFu9i)
//============================================================================


struct  BFu9s_BFu17ll_BFu9ll  {
  unsigned short v1:9;
  __tsu64 v2:17;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFu17ll_BFu9ll) C1{ Fs:9 FL:17 FL:9}



static void Test_BFu9s_BFu17ll_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 2, 9, 1, "BFu9s_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu9ll, BFu9s_BFu17ll_BFu9ll)
//============================================================================


struct  BFu9s_BFu17ll_BFu9s  {
  unsigned short v1:9;
  __tsu64 v2:17;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFu17ll_BFu9s) C1{ Fs:9 FL:17 Fs:9}



static void Test_BFu9s_BFu17ll_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu9s");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu9s, BFu9s_BFu17ll_BFu9s)
//============================================================================


struct  BFu9s_BFu17ll_C  {
  unsigned short v1:9;
  __tsu64 v2:17;
  char v3;
};
//SIG(1 BFu9s_BFu17ll_C) C1{ Fs:9 FL:17 Fc}



static void Test_BFu9s_BFu17ll_C()
{
  {
    init_simple_test("BFu9s_BFu17ll_C");
    static STRUCT_IF_C BFu9s_BFu17ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_C");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_C");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_C");
    check_field_offset(lv, v3, 4, "BFu9s_BFu17ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_C, BFu9s_BFu17ll_C)
//============================================================================


struct  BFu9s_BFu17ll_D  {
  unsigned short v1:9;
  __tsu64 v2:17;
  double v3;
};
//SIG(1 BFu9s_BFu17ll_D) C1{ Fs:9 FL:17 FL}



static void Test_BFu9s_BFu17ll_D()
{
  {
    init_simple_test("BFu9s_BFu17ll_D");
    static STRUCT_IF_C BFu9s_BFu17ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu17ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_D");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_D");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu17ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_D, BFu9s_BFu17ll_D)
//============================================================================


struct  BFu9s_BFu17ll_F  {
  unsigned short v1:9;
  __tsu64 v2:17;
  float v3;
};
//SIG(1 BFu9s_BFu17ll_F) C1{ Fs:9 FL:17 Fi}



static void Test_BFu9s_BFu17ll_F()
{
  {
    init_simple_test("BFu9s_BFu17ll_F");
    static STRUCT_IF_C BFu9s_BFu17ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_F");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_F");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_F");
    check_field_offset(lv, v3, 4, "BFu9s_BFu17ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_F, BFu9s_BFu17ll_F)
//============================================================================


struct  BFu9s_BFu17ll_I  {
  unsigned short v1:9;
  __tsu64 v2:17;
  int v3;
};
//SIG(1 BFu9s_BFu17ll_I) C1{ Fs:9 FL:17 Fi}



static void Test_BFu9s_BFu17ll_I()
{
  {
    init_simple_test("BFu9s_BFu17ll_I");
    static STRUCT_IF_C BFu9s_BFu17ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_I");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_I");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_I");
    check_field_offset(lv, v3, 4, "BFu9s_BFu17ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_I, BFu9s_BFu17ll_I)
//============================================================================


struct  BFu9s_BFu17ll_Ip  {
  unsigned short v1:9;
  __tsu64 v2:17;
  int *v3;
};
//SIG(1 BFu9s_BFu17ll_Ip) C1{ Fs:9 FL:17 Fp}



static void Test_BFu9s_BFu17ll_Ip()
{
  {
    init_simple_test("BFu9s_BFu17ll_Ip");
    static STRUCT_IF_C BFu9s_BFu17ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu17ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_Ip");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_Ip");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu17ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_Ip, BFu9s_BFu17ll_Ip)
//============================================================================


struct  BFu9s_BFu17ll_L  {
  unsigned short v1:9;
  __tsu64 v2:17;
  __tsi64 v3;
};
//SIG(1 BFu9s_BFu17ll_L) C1{ Fs:9 FL:17 FL}



static void Test_BFu9s_BFu17ll_L()
{
  {
    init_simple_test("BFu9s_BFu17ll_L");
    static STRUCT_IF_C BFu9s_BFu17ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu17ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_L");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_L");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu17ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_L, BFu9s_BFu17ll_L)
//============================================================================


struct  BFu9s_BFu17ll_S  {
  unsigned short v1:9;
  __tsu64 v2:17;
  short v3;
};
//SIG(1 BFu9s_BFu17ll_S) C1{ Fs:9 FL:17 Fs}



static void Test_BFu9s_BFu17ll_S()
{
  {
    init_simple_test("BFu9s_BFu17ll_S");
    static STRUCT_IF_C BFu9s_BFu17ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_S");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_S");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_S");
    check_field_offset(lv, v3, 4, "BFu9s_BFu17ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_S, BFu9s_BFu17ll_S)
//============================================================================


struct  BFu9s_BFu17ll_Uc  {
  unsigned short v1:9;
  __tsu64 v2:17;
  unsigned char v3;
};
//SIG(1 BFu9s_BFu17ll_Uc) C1{ Fs:9 FL:17 Fc}



static void Test_BFu9s_BFu17ll_Uc()
{
  {
    init_simple_test("BFu9s_BFu17ll_Uc");
    static STRUCT_IF_C BFu9s_BFu17ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_Uc");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_Uc");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_Uc");
    check_field_offset(lv, v3, 4, "BFu9s_BFu17ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_Uc, BFu9s_BFu17ll_Uc)
//============================================================================


struct  BFu9s_BFu17ll_Ui  {
  unsigned short v1:9;
  __tsu64 v2:17;
  unsigned int v3;
};
//SIG(1 BFu9s_BFu17ll_Ui) C1{ Fs:9 FL:17 Fi}



static void Test_BFu9s_BFu17ll_Ui()
{
  {
    init_simple_test("BFu9s_BFu17ll_Ui");
    static STRUCT_IF_C BFu9s_BFu17ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_Ui");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_Ui");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_Ui");
    check_field_offset(lv, v3, 4, "BFu9s_BFu17ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_Ui, BFu9s_BFu17ll_Ui)
//============================================================================


struct  BFu9s_BFu17ll_Ul  {
  unsigned short v1:9;
  __tsu64 v2:17;
  __tsu64 v3;
};
//SIG(1 BFu9s_BFu17ll_Ul) C1{ Fs:9 FL:17 FL}



static void Test_BFu9s_BFu17ll_Ul()
{
  {
    init_simple_test("BFu9s_BFu17ll_Ul");
    static STRUCT_IF_C BFu9s_BFu17ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu17ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_Ul");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_Ul");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu17ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_Ul, BFu9s_BFu17ll_Ul)
//============================================================================


struct  BFu9s_BFu17ll_Us  {
  unsigned short v1:9;
  __tsu64 v2:17;
  unsigned short v3;
};
//SIG(1 BFu9s_BFu17ll_Us) C1{ Fs:9 FL:17 Fs}



static void Test_BFu9s_BFu17ll_Us()
{
  {
    init_simple_test("BFu9s_BFu17ll_Us");
    static STRUCT_IF_C BFu9s_BFu17ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu17ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_Us");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_Us");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_Us");
    check_field_offset(lv, v3, 4, "BFu9s_BFu17ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_Us, BFu9s_BFu17ll_Us)
//============================================================================


struct  BFu9s_BFu17ll_Vp  {
  unsigned short v1:9;
  __tsu64 v2:17;
  void *v3;
};
//SIG(1 BFu9s_BFu17ll_Vp) C1{ Fs:9 FL:17 Fp}



static void Test_BFu9s_BFu17ll_Vp()
{
  {
    init_simple_test("BFu9s_BFu17ll_Vp");
    static STRUCT_IF_C BFu9s_BFu17ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu17ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_Vp");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_Vp");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu17ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_Vp, BFu9s_BFu17ll_Vp)
//============================================================================


struct  BFu9s_BFu1c  {
  unsigned short v1:9;
  unsigned char v2:1;
};
//SIG(1 BFu9s_BFu1c) C1{ Fs:9 Fc:1}



static void Test_BFu9s_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu1c");
    static STRUCT_IF_C BFu9s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu9s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c, BFu9s_BFu1c)
//============================================================================


struct  BFu9s_BFu1c_BFu15i  {
  unsigned short v1:9;
  unsigned char v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu9s_BFu1c_BFu15i) C1{ Fs:9 Fc:1 Fi:15}



static void Test_BFu9s_BFu1c_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu15i");
    static STRUCT_IF_C BFu9s_BFu1c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 1, 2, 15, 1, "BFu9s_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 1, 2, 15, hide_ull(1LL<<14), "BFu9s_BFu1c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu15i, BFu9s_BFu1c_BFu15i)
//============================================================================


struct  BFu9s_BFu1c_BFu15ll  {
  unsigned short v1:9;
  unsigned char v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_BFu1c_BFu15ll) C1{ Fs:9 Fc:1 FL:15}



static void Test_BFu9s_BFu1c_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu1c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 2, 15, 1, "BFu9s_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 2, 15, hide_ull(1LL<<14), "BFu9s_BFu1c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu15ll, BFu9s_BFu1c_BFu15ll)
//============================================================================


struct  BFu9s_BFu1c_BFu15s  {
  unsigned short v1:9;
  unsigned char v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu9s_BFu1c_BFu15s) C1{ Fs:9 Fc:1 Fs:15}



static void Test_BFu9s_BFu1c_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu15s");
    static STRUCT_IF_C BFu9s_BFu1c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu9s_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu1c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu15s, BFu9s_BFu1c_BFu15s)
//============================================================================


struct  BFu9s_BFu1c_BFu16i  {
  unsigned short v1:9;
  unsigned char v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu9s_BFu1c_BFu16i) C1{ Fs:9 Fc:1 Fi:16}



static void Test_BFu9s_BFu1c_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu16i");
    static STRUCT_IF_C BFu9s_BFu1c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 1, 2, 16, 1, "BFu9s_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 1, 2, 16, hide_ull(1LL<<15), "BFu9s_BFu1c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu16i, BFu9s_BFu1c_BFu16i)
//============================================================================


struct  BFu9s_BFu1c_BFu16ll  {
  unsigned short v1:9;
  unsigned char v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_BFu1c_BFu16ll) C1{ Fs:9 Fc:1 FL:16}



static void Test_BFu9s_BFu1c_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu1c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 2, 16, 1, "BFu9s_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 2, 16, hide_ull(1LL<<15), "BFu9s_BFu1c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu16ll, BFu9s_BFu1c_BFu16ll)
//============================================================================


struct  BFu9s_BFu1c_BFu16s  {
  unsigned short v1:9;
  unsigned char v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu9s_BFu1c_BFu16s) C1{ Fs:9 Fc:1 Fs:16}



static void Test_BFu9s_BFu1c_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu16s");
    static STRUCT_IF_C BFu9s_BFu1c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu9s_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu1c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu16s, BFu9s_BFu1c_BFu16s)
//============================================================================


struct  BFu9s_BFu1c_BFu17i  {
  unsigned short v1:9;
  unsigned char v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu9s_BFu1c_BFu17i) C1{ Fs:9 Fc:1 Fi:17}



static void Test_BFu9s_BFu1c_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu17i");
    static STRUCT_IF_C BFu9s_BFu1c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 1, 2, 17, 1, "BFu9s_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 1, 2, 17, hide_ull(1LL<<16), "BFu9s_BFu1c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu17i, BFu9s_BFu1c_BFu17i)
//============================================================================


struct  BFu9s_BFu1c_BFu17ll  {
  unsigned short v1:9;
  unsigned char v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_BFu1c_BFu17ll) C1{ Fs:9 Fc:1 FL:17}



static void Test_BFu9s_BFu1c_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu1c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 2, 17, 1, "BFu9s_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 2, 17, hide_ull(1LL<<16), "BFu9s_BFu1c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu17ll, BFu9s_BFu1c_BFu17ll)
//============================================================================


struct  BFu9s_BFu1c_BFu1c  {
  unsigned short v1:9;
  unsigned char v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu9s_BFu1c_BFu1c) C1{ Fs:9 Fc:1 Fc:1}



static void Test_BFu9s_BFu1c_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu1c");
    static STRUCT_IF_C BFu9s_BFu1c_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu9s_BFu1c_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 1, 2, 1, 1, "BFu9s_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu1c, BFu9s_BFu1c_BFu1c)
//============================================================================


struct  BFu9s_BFu1c_BFu1i  {
  unsigned short v1:9;
  unsigned char v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu9s_BFu1c_BFu1i) C1{ Fs:9 Fc:1 Fi:1}



static void Test_BFu9s_BFu1c_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu1i");
    static STRUCT_IF_C BFu9s_BFu1c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 1, 2, 1, 1, "BFu9s_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu1i, BFu9s_BFu1c_BFu1i)
//============================================================================


struct  BFu9s_BFu1c_BFu1ll  {
  unsigned short v1:9;
  unsigned char v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_BFu1c_BFu1ll) C1{ Fs:9 Fc:1 FL:1}



static void Test_BFu9s_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 1, 2, 1, 1, "BFu9s_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu1ll, BFu9s_BFu1c_BFu1ll)
//============================================================================


struct  BFu9s_BFu1c_BFu1s  {
  unsigned short v1:9;
  unsigned char v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu9s_BFu1c_BFu1s) C1{ Fs:9 Fc:1 Fs:1}



static void Test_BFu9s_BFu1c_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu1s");
    static STRUCT_IF_C BFu9s_BFu1c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu9s_BFu1c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 1, 2, 1, 1, "BFu9s_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu1s, BFu9s_BFu1c_BFu1s)
//============================================================================


struct  BFu9s_BFu1c_BFu31i  {
  unsigned short v1:9;
  unsigned char v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu9s_BFu1c_BFu31i) C1{ Fs:9 Fc:1 Fi:31}



static void Test_BFu9s_BFu1c_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu31i");
    static STRUCT_IF_C BFu9s_BFu1c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu1c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu31i, BFu9s_BFu1c_BFu31i)
//============================================================================


struct  BFu9s_BFu1c_BFu31ll  {
  unsigned short v1:9;
  unsigned char v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_BFu1c_BFu31ll) C1{ Fs:9 Fc:1 FL:31}



static void Test_BFu9s_BFu1c_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu1c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 2, 31, 1, "BFu9s_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 2, 31, hide_ull(1LL<<30), "BFu9s_BFu1c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu31ll, BFu9s_BFu1c_BFu31ll)
//============================================================================


struct  BFu9s_BFu1c_BFu32i  {
  unsigned short v1:9;
  unsigned char v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu9s_BFu1c_BFu32i) C1{ Fs:9 Fc:1 Fi:32}



static void Test_BFu9s_BFu1c_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu32i");
    static STRUCT_IF_C BFu9s_BFu1c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu1c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu32i, BFu9s_BFu1c_BFu32i)
//============================================================================


struct  BFu9s_BFu1c_BFu32ll  {
  unsigned short v1:9;
  unsigned char v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_BFu1c_BFu32ll) C1{ Fs:9 Fc:1 FL:32}



static void Test_BFu9s_BFu1c_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu1c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 2, 32, 1, "BFu9s_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 2, 32, hide_ull(1LL<<31), "BFu9s_BFu1c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu32ll, BFu9s_BFu1c_BFu32ll)
//============================================================================


struct  BFu9s_BFu1c_BFu33  {
  unsigned short v1:9;
  unsigned char v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_BFu1c_BFu33) C1{ Fs:9 Fc:1 FL:33}



static void Test_BFu9s_BFu1c_BFu33()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu33");
    static STRUCT_IF_C BFu9s_BFu1c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu33");
    set_bf_and_test(lv, v3, 1, 2, 33, 1, "BFu9s_BFu1c_BFu33");
    set_bf_and_test(lv, v3, 1, 2, 33, hide_ull(1LL<<32), "BFu9s_BFu1c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu33, BFu9s_BFu1c_BFu33)
//============================================================================


struct  BFu9s_BFu1c_BFu7c  {
  unsigned short v1:9;
  unsigned char v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu9s_BFu1c_BFu7c) C1{ Fs:9 Fc:1 Fc:7}



static void Test_BFu9s_BFu1c_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu7c");
    static STRUCT_IF_C BFu9s_BFu1c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu9s_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu1c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu7c, BFu9s_BFu1c_BFu7c)
//============================================================================


struct  BFu9s_BFu1c_BFu7i  {
  unsigned short v1:9;
  unsigned char v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu9s_BFu1c_BFu7i) C1{ Fs:9 Fc:1 Fi:7}



static void Test_BFu9s_BFu1c_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu7i");
    static STRUCT_IF_C BFu9s_BFu1c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 1, 2, 7, 1, "BFu9s_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 1, 2, 7, hide_ull(1LL<<6), "BFu9s_BFu1c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu7i, BFu9s_BFu1c_BFu7i)
//============================================================================


struct  BFu9s_BFu1c_BFu7ll  {
  unsigned short v1:9;
  unsigned char v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_BFu1c_BFu7ll) C1{ Fs:9 Fc:1 FL:7}



static void Test_BFu9s_BFu1c_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu1c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 2, 7, 1, "BFu9s_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 2, 7, hide_ull(1LL<<6), "BFu9s_BFu1c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu7ll, BFu9s_BFu1c_BFu7ll)
//============================================================================


struct  BFu9s_BFu1c_BFu7s  {
  unsigned short v1:9;
  unsigned char v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu9s_BFu1c_BFu7s) C1{ Fs:9 Fc:1 Fs:7}



static void Test_BFu9s_BFu1c_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu7s");
    static STRUCT_IF_C BFu9s_BFu1c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu9s_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu1c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu7s, BFu9s_BFu1c_BFu7s)
//============================================================================


struct  BFu9s_BFu1c_BFu8c  {
  unsigned short v1:9;
  unsigned char v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu9s_BFu1c_BFu8c) C1{ Fs:9 Fc:1 Fc:8}



static void Test_BFu9s_BFu1c_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu8c");
    static STRUCT_IF_C BFu9s_BFu1c_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1c_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu9s_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu1c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu8c, BFu9s_BFu1c_BFu8c)
//============================================================================


struct  BFu9s_BFu1c_BFu8i  {
  unsigned short v1:9;
  unsigned char v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu9s_BFu1c_BFu8i) C1{ Fs:9 Fc:1 Fi:8}



static void Test_BFu9s_BFu1c_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu8i");
    static STRUCT_IF_C BFu9s_BFu1c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 1, 2, 8, 1, "BFu9s_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 1, 2, 8, hide_ull(1LL<<7), "BFu9s_BFu1c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu8i, BFu9s_BFu1c_BFu8i)
//============================================================================


struct  BFu9s_BFu1c_BFu8ll  {
  unsigned short v1:9;
  unsigned char v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_BFu1c_BFu8ll) C1{ Fs:9 Fc:1 FL:8}



static void Test_BFu9s_BFu1c_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu1c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 1, 2, 8, 1, "BFu9s_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 1, 2, 8, hide_ull(1LL<<7), "BFu9s_BFu1c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu8ll, BFu9s_BFu1c_BFu8ll)
//============================================================================


struct  BFu9s_BFu1c_BFu8s  {
  unsigned short v1:9;
  unsigned char v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu9s_BFu1c_BFu8s) C1{ Fs:9 Fc:1 Fs:8}



static void Test_BFu9s_BFu1c_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu8s");
    static STRUCT_IF_C BFu9s_BFu1c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu9s_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu1c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu8s, BFu9s_BFu1c_BFu8s)
//============================================================================


struct  BFu9s_BFu1c_BFu9i  {
  unsigned short v1:9;
  unsigned char v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFu1c_BFu9i) C1{ Fs:9 Fc:1 Fi:9}



static void Test_BFu9s_BFu1c_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu9i");
    static STRUCT_IF_C BFu9s_BFu1c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 1, 2, 9, 1, "BFu9s_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 1, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu9i, BFu9s_BFu1c_BFu9i)
//============================================================================


struct  BFu9s_BFu1c_BFu9ll  {
  unsigned short v1:9;
  unsigned char v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFu1c_BFu9ll) C1{ Fs:9 Fc:1 FL:9}



static void Test_BFu9s_BFu1c_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu1c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 2, 9, 1, "BFu9s_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu9ll, BFu9s_BFu1c_BFu9ll)
//============================================================================


struct  BFu9s_BFu1c_BFu9s  {
  unsigned short v1:9;
  unsigned char v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFu1c_BFu9s) C1{ Fs:9 Fc:1 Fs:9}



static void Test_BFu9s_BFu1c_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu9s");
    static STRUCT_IF_C BFu9s_BFu1c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu9s_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu9s, BFu9s_BFu1c_BFu9s)
//============================================================================


struct  BFu9s_BFu1c_C  {
  unsigned short v1:9;
  unsigned char v2:1;
  char v3;
};
//SIG(1 BFu9s_BFu1c_C) C1{ Fs:9 Fc:1 Fc}



static void Test_BFu9s_BFu1c_C()
{
  {
    init_simple_test("BFu9s_BFu1c_C");
    static STRUCT_IF_C BFu9s_BFu1c_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1c_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1c_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_C");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_C");
    check_field_offset(lv, v3, 2, "BFu9s_BFu1c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_C, BFu9s_BFu1c_C)
//============================================================================


struct  BFu9s_BFu1c_D  {
  unsigned short v1:9;
  unsigned char v2:1;
  double v3;
};
//SIG(1 BFu9s_BFu1c_D) C1{ Fs:9 Fc:1 FL}



static void Test_BFu9s_BFu1c_D()
{
  {
    init_simple_test("BFu9s_BFu1c_D");
    static STRUCT_IF_C BFu9s_BFu1c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu1c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1c_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_D");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu1c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_D, BFu9s_BFu1c_D)
//============================================================================


struct  BFu9s_BFu1c_F  {
  unsigned short v1:9;
  unsigned char v2:1;
  float v3;
};
//SIG(1 BFu9s_BFu1c_F) C1{ Fs:9 Fc:1 Fi}



static void Test_BFu9s_BFu1c_F()
{
  {
    init_simple_test("BFu9s_BFu1c_F");
    static STRUCT_IF_C BFu9s_BFu1c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1c_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_F");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_F");
    check_field_offset(lv, v3, 4, "BFu9s_BFu1c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_F, BFu9s_BFu1c_F)
//============================================================================


struct  BFu9s_BFu1c_I  {
  unsigned short v1:9;
  unsigned char v2:1;
  int v3;
};
//SIG(1 BFu9s_BFu1c_I) C1{ Fs:9 Fc:1 Fi}



static void Test_BFu9s_BFu1c_I()
{
  {
    init_simple_test("BFu9s_BFu1c_I");
    static STRUCT_IF_C BFu9s_BFu1c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1c_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_I");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_I");
    check_field_offset(lv, v3, 4, "BFu9s_BFu1c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_I, BFu9s_BFu1c_I)
//============================================================================


struct  BFu9s_BFu1c_Ip  {
  unsigned short v1:9;
  unsigned char v2:1;
  int *v3;
};
//SIG(1 BFu9s_BFu1c_Ip) C1{ Fs:9 Fc:1 Fp}



static void Test_BFu9s_BFu1c_Ip()
{
  {
    init_simple_test("BFu9s_BFu1c_Ip");
    static STRUCT_IF_C BFu9s_BFu1c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu1c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_Ip");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu1c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_Ip, BFu9s_BFu1c_Ip)
//============================================================================


struct  BFu9s_BFu1c_L  {
  unsigned short v1:9;
  unsigned char v2:1;
  __tsi64 v3;
};
//SIG(1 BFu9s_BFu1c_L) C1{ Fs:9 Fc:1 FL}



static void Test_BFu9s_BFu1c_L()
{
  {
    init_simple_test("BFu9s_BFu1c_L");
    static STRUCT_IF_C BFu9s_BFu1c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu1c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1c_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_L");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu1c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_L, BFu9s_BFu1c_L)
//============================================================================


struct  BFu9s_BFu1c_S  {
  unsigned short v1:9;
  unsigned char v2:1;
  short v3;
};
//SIG(1 BFu9s_BFu1c_S) C1{ Fs:9 Fc:1 Fs}



static void Test_BFu9s_BFu1c_S()
{
  {
    init_simple_test("BFu9s_BFu1c_S");
    static STRUCT_IF_C BFu9s_BFu1c_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1c_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1c_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_S");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_S");
    check_field_offset(lv, v3, 2, "BFu9s_BFu1c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_S, BFu9s_BFu1c_S)
//============================================================================


struct  BFu9s_BFu1c_Uc  {
  unsigned short v1:9;
  unsigned char v2:1;
  unsigned char v3;
};
//SIG(1 BFu9s_BFu1c_Uc) C1{ Fs:9 Fc:1 Fc}



static void Test_BFu9s_BFu1c_Uc()
{
  {
    init_simple_test("BFu9s_BFu1c_Uc");
    static STRUCT_IF_C BFu9s_BFu1c_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1c_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_Uc");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_Uc");
    check_field_offset(lv, v3, 2, "BFu9s_BFu1c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_Uc, BFu9s_BFu1c_Uc)
//============================================================================


struct  BFu9s_BFu1c_Ui  {
  unsigned short v1:9;
  unsigned char v2:1;
  unsigned int v3;
};
//SIG(1 BFu9s_BFu1c_Ui) C1{ Fs:9 Fc:1 Fi}



static void Test_BFu9s_BFu1c_Ui()
{
  {
    init_simple_test("BFu9s_BFu1c_Ui");
    static STRUCT_IF_C BFu9s_BFu1c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_Ui");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_Ui");
    check_field_offset(lv, v3, 4, "BFu9s_BFu1c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_Ui, BFu9s_BFu1c_Ui)
//============================================================================


struct  BFu9s_BFu1c_Ul  {
  unsigned short v1:9;
  unsigned char v2:1;
  __tsu64 v3;
};
//SIG(1 BFu9s_BFu1c_Ul) C1{ Fs:9 Fc:1 FL}



static void Test_BFu9s_BFu1c_Ul()
{
  {
    init_simple_test("BFu9s_BFu1c_Ul");
    static STRUCT_IF_C BFu9s_BFu1c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu1c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_Ul");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu1c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_Ul, BFu9s_BFu1c_Ul)
//============================================================================


struct  BFu9s_BFu1c_Us  {
  unsigned short v1:9;
  unsigned char v2:1;
  unsigned short v3;
};
//SIG(1 BFu9s_BFu1c_Us) C1{ Fs:9 Fc:1 Fs}



static void Test_BFu9s_BFu1c_Us()
{
  {
    init_simple_test("BFu9s_BFu1c_Us");
    static STRUCT_IF_C BFu9s_BFu1c_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_Us");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_Us");
    check_field_offset(lv, v3, 2, "BFu9s_BFu1c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_Us, BFu9s_BFu1c_Us)
//============================================================================


struct  BFu9s_BFu1c_Vp  {
  unsigned short v1:9;
  unsigned char v2:1;
  void *v3;
};
//SIG(1 BFu9s_BFu1c_Vp) C1{ Fs:9 Fc:1 Fp}



static void Test_BFu9s_BFu1c_Vp()
{
  {
    init_simple_test("BFu9s_BFu1c_Vp");
    static STRUCT_IF_C BFu9s_BFu1c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu1c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_Vp");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu1c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_Vp, BFu9s_BFu1c_Vp)
//============================================================================


struct  BFu9s_BFu1i  {
  unsigned short v1:9;
  unsigned int v2:1;
};
//SIG(1 BFu9s_BFu1i) C1{ Fs:9 Fi:1}



static void Test_BFu9s_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu1i");
    static STRUCT_IF_C BFu9s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i, BFu9s_BFu1i)
//============================================================================


struct  BFu9s_BFu1i_BFu15i  {
  unsigned short v1:9;
  unsigned int v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu9s_BFu1i_BFu15i) C1{ Fs:9 Fi:1 Fi:15}



static void Test_BFu9s_BFu1i_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu15i");
    static STRUCT_IF_C BFu9s_BFu1i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 1, 2, 15, 1, "BFu9s_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 1, 2, 15, hide_ull(1LL<<14), "BFu9s_BFu1i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu15i, BFu9s_BFu1i_BFu15i)
//============================================================================


struct  BFu9s_BFu1i_BFu15ll  {
  unsigned short v1:9;
  unsigned int v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_BFu1i_BFu15ll) C1{ Fs:9 Fi:1 FL:15}



static void Test_BFu9s_BFu1i_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu1i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 2, 15, 1, "BFu9s_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 2, 15, hide_ull(1LL<<14), "BFu9s_BFu1i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu15ll, BFu9s_BFu1i_BFu15ll)
//============================================================================


struct  BFu9s_BFu1i_BFu15s  {
  unsigned short v1:9;
  unsigned int v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu9s_BFu1i_BFu15s) C1{ Fs:9 Fi:1 Fs:15}



static void Test_BFu9s_BFu1i_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu15s");
    static STRUCT_IF_C BFu9s_BFu1i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu9s_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu1i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu15s, BFu9s_BFu1i_BFu15s)
//============================================================================


struct  BFu9s_BFu1i_BFu16i  {
  unsigned short v1:9;
  unsigned int v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu9s_BFu1i_BFu16i) C1{ Fs:9 Fi:1 Fi:16}



static void Test_BFu9s_BFu1i_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu16i");
    static STRUCT_IF_C BFu9s_BFu1i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 1, 2, 16, 1, "BFu9s_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 1, 2, 16, hide_ull(1LL<<15), "BFu9s_BFu1i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu16i, BFu9s_BFu1i_BFu16i)
//============================================================================


struct  BFu9s_BFu1i_BFu16ll  {
  unsigned short v1:9;
  unsigned int v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_BFu1i_BFu16ll) C1{ Fs:9 Fi:1 FL:16}



static void Test_BFu9s_BFu1i_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu1i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 2, 16, 1, "BFu9s_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 2, 16, hide_ull(1LL<<15), "BFu9s_BFu1i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu16ll, BFu9s_BFu1i_BFu16ll)
//============================================================================


struct  BFu9s_BFu1i_BFu16s  {
  unsigned short v1:9;
  unsigned int v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu9s_BFu1i_BFu16s) C1{ Fs:9 Fi:1 Fs:16}



static void Test_BFu9s_BFu1i_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu16s");
    static STRUCT_IF_C BFu9s_BFu1i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu9s_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu1i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu16s, BFu9s_BFu1i_BFu16s)
//============================================================================


struct  BFu9s_BFu1i_BFu17i  {
  unsigned short v1:9;
  unsigned int v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu9s_BFu1i_BFu17i) C1{ Fs:9 Fi:1 Fi:17}



static void Test_BFu9s_BFu1i_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu17i");
    static STRUCT_IF_C BFu9s_BFu1i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 1, 2, 17, 1, "BFu9s_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 1, 2, 17, hide_ull(1LL<<16), "BFu9s_BFu1i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu17i, BFu9s_BFu1i_BFu17i)
//============================================================================


struct  BFu9s_BFu1i_BFu17ll  {
  unsigned short v1:9;
  unsigned int v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_BFu1i_BFu17ll) C1{ Fs:9 Fi:1 FL:17}



static void Test_BFu9s_BFu1i_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu1i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 2, 17, 1, "BFu9s_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 2, 17, hide_ull(1LL<<16), "BFu9s_BFu1i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu17ll, BFu9s_BFu1i_BFu17ll)
//============================================================================


struct  BFu9s_BFu1i_BFu1c  {
  unsigned short v1:9;
  unsigned int v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu9s_BFu1i_BFu1c) C1{ Fs:9 Fi:1 Fc:1}



static void Test_BFu9s_BFu1i_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu1c");
    static STRUCT_IF_C BFu9s_BFu1i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 1, 2, 1, 1, "BFu9s_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu1c, BFu9s_BFu1i_BFu1c)
//============================================================================


struct  BFu9s_BFu1i_BFu1i  {
  unsigned short v1:9;
  unsigned int v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu9s_BFu1i_BFu1i) C1{ Fs:9 Fi:1 Fi:1}



static void Test_BFu9s_BFu1i_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu1i");
    static STRUCT_IF_C BFu9s_BFu1i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 1, 2, 1, 1, "BFu9s_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu1i, BFu9s_BFu1i_BFu1i)
//============================================================================


struct  BFu9s_BFu1i_BFu1ll  {
  unsigned short v1:9;
  unsigned int v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_BFu1i_BFu1ll) C1{ Fs:9 Fi:1 FL:1}



static void Test_BFu9s_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 1, 2, 1, 1, "BFu9s_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu1ll, BFu9s_BFu1i_BFu1ll)
//============================================================================


struct  BFu9s_BFu1i_BFu1s  {
  unsigned short v1:9;
  unsigned int v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu9s_BFu1i_BFu1s) C1{ Fs:9 Fi:1 Fs:1}



static void Test_BFu9s_BFu1i_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu1s");
    static STRUCT_IF_C BFu9s_BFu1i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 1, 2, 1, 1, "BFu9s_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu1s, BFu9s_BFu1i_BFu1s)
//============================================================================


struct  BFu9s_BFu1i_BFu31i  {
  unsigned short v1:9;
  unsigned int v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu9s_BFu1i_BFu31i) C1{ Fs:9 Fi:1 Fi:31}



static void Test_BFu9s_BFu1i_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu31i");
    static STRUCT_IF_C BFu9s_BFu1i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu1i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu31i, BFu9s_BFu1i_BFu31i)
//============================================================================


struct  BFu9s_BFu1i_BFu31ll  {
  unsigned short v1:9;
  unsigned int v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_BFu1i_BFu31ll) C1{ Fs:9 Fi:1 FL:31}



static void Test_BFu9s_BFu1i_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu1i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 2, 31, 1, "BFu9s_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 2, 31, hide_ull(1LL<<30), "BFu9s_BFu1i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu31ll, BFu9s_BFu1i_BFu31ll)
//============================================================================


struct  BFu9s_BFu1i_BFu32i  {
  unsigned short v1:9;
  unsigned int v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu9s_BFu1i_BFu32i) C1{ Fs:9 Fi:1 Fi:32}



static void Test_BFu9s_BFu1i_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu32i");
    static STRUCT_IF_C BFu9s_BFu1i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu1i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu32i, BFu9s_BFu1i_BFu32i)
//============================================================================


struct  BFu9s_BFu1i_BFu32ll  {
  unsigned short v1:9;
  unsigned int v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_BFu1i_BFu32ll) C1{ Fs:9 Fi:1 FL:32}



static void Test_BFu9s_BFu1i_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu1i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 2, 32, 1, "BFu9s_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 2, 32, hide_ull(1LL<<31), "BFu9s_BFu1i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu32ll, BFu9s_BFu1i_BFu32ll)
//============================================================================


struct  BFu9s_BFu1i_BFu33  {
  unsigned short v1:9;
  unsigned int v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_BFu1i_BFu33) C1{ Fs:9 Fi:1 FL:33}



static void Test_BFu9s_BFu1i_BFu33()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu33");
    static STRUCT_IF_C BFu9s_BFu1i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu33");
    set_bf_and_test(lv, v3, 1, 2, 33, 1, "BFu9s_BFu1i_BFu33");
    set_bf_and_test(lv, v3, 1, 2, 33, hide_ull(1LL<<32), "BFu9s_BFu1i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu33, BFu9s_BFu1i_BFu33)
//============================================================================


struct  BFu9s_BFu1i_BFu7c  {
  unsigned short v1:9;
  unsigned int v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu9s_BFu1i_BFu7c) C1{ Fs:9 Fi:1 Fc:7}



static void Test_BFu9s_BFu1i_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu7c");
    static STRUCT_IF_C BFu9s_BFu1i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu9s_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu1i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu7c, BFu9s_BFu1i_BFu7c)
//============================================================================


struct  BFu9s_BFu1i_BFu7i  {
  unsigned short v1:9;
  unsigned int v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu9s_BFu1i_BFu7i) C1{ Fs:9 Fi:1 Fi:7}



static void Test_BFu9s_BFu1i_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu7i");
    static STRUCT_IF_C BFu9s_BFu1i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 1, 2, 7, 1, "BFu9s_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 1, 2, 7, hide_ull(1LL<<6), "BFu9s_BFu1i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu7i, BFu9s_BFu1i_BFu7i)
//============================================================================


struct  BFu9s_BFu1i_BFu7ll  {
  unsigned short v1:9;
  unsigned int v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_BFu1i_BFu7ll) C1{ Fs:9 Fi:1 FL:7}



static void Test_BFu9s_BFu1i_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu1i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 2, 7, 1, "BFu9s_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 2, 7, hide_ull(1LL<<6), "BFu9s_BFu1i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu7ll, BFu9s_BFu1i_BFu7ll)
//============================================================================


struct  BFu9s_BFu1i_BFu7s  {
  unsigned short v1:9;
  unsigned int v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu9s_BFu1i_BFu7s) C1{ Fs:9 Fi:1 Fs:7}



static void Test_BFu9s_BFu1i_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu7s");
    static STRUCT_IF_C BFu9s_BFu1i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu9s_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu1i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu7s, BFu9s_BFu1i_BFu7s)
//============================================================================


struct  BFu9s_BFu1i_BFu8c  {
  unsigned short v1:9;
  unsigned int v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu9s_BFu1i_BFu8c) C1{ Fs:9 Fi:1 Fc:8}



static void Test_BFu9s_BFu1i_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu8c");
    static STRUCT_IF_C BFu9s_BFu1i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu9s_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu1i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu8c, BFu9s_BFu1i_BFu8c)
//============================================================================


struct  BFu9s_BFu1i_BFu8i  {
  unsigned short v1:9;
  unsigned int v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu9s_BFu1i_BFu8i) C1{ Fs:9 Fi:1 Fi:8}



static void Test_BFu9s_BFu1i_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu8i");
    static STRUCT_IF_C BFu9s_BFu1i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 1, 2, 8, 1, "BFu9s_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 1, 2, 8, hide_ull(1LL<<7), "BFu9s_BFu1i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu8i, BFu9s_BFu1i_BFu8i)
//============================================================================


struct  BFu9s_BFu1i_BFu8ll  {
  unsigned short v1:9;
  unsigned int v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_BFu1i_BFu8ll) C1{ Fs:9 Fi:1 FL:8}



static void Test_BFu9s_BFu1i_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu1i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 2, 8, 1, "BFu9s_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 2, 8, hide_ull(1LL<<7), "BFu9s_BFu1i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu8ll, BFu9s_BFu1i_BFu8ll)
//============================================================================


struct  BFu9s_BFu1i_BFu8s  {
  unsigned short v1:9;
  unsigned int v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu9s_BFu1i_BFu8s) C1{ Fs:9 Fi:1 Fs:8}



static void Test_BFu9s_BFu1i_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu8s");
    static STRUCT_IF_C BFu9s_BFu1i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu9s_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu1i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu8s, BFu9s_BFu1i_BFu8s)
//============================================================================


struct  BFu9s_BFu1i_BFu9i  {
  unsigned short v1:9;
  unsigned int v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFu1i_BFu9i) C1{ Fs:9 Fi:1 Fi:9}



static void Test_BFu9s_BFu1i_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu9i");
    static STRUCT_IF_C BFu9s_BFu1i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 1, 2, 9, 1, "BFu9s_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 1, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu9i, BFu9s_BFu1i_BFu9i)
//============================================================================


struct  BFu9s_BFu1i_BFu9ll  {
  unsigned short v1:9;
  unsigned int v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFu1i_BFu9ll) C1{ Fs:9 Fi:1 FL:9}



static void Test_BFu9s_BFu1i_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu1i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 2, 9, 1, "BFu9s_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu9ll, BFu9s_BFu1i_BFu9ll)
//============================================================================


struct  BFu9s_BFu1i_BFu9s  {
  unsigned short v1:9;
  unsigned int v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFu1i_BFu9s) C1{ Fs:9 Fi:1 Fs:9}



static void Test_BFu9s_BFu1i_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu9s");
    static STRUCT_IF_C BFu9s_BFu1i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu9s_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu9s, BFu9s_BFu1i_BFu9s)
//============================================================================


struct  BFu9s_BFu1i_C  {
  unsigned short v1:9;
  unsigned int v2:1;
  char v3;
};
//SIG(1 BFu9s_BFu1i_C) C1{ Fs:9 Fi:1 Fc}



static void Test_BFu9s_BFu1i_C()
{
  {
    init_simple_test("BFu9s_BFu1i_C");
    static STRUCT_IF_C BFu9s_BFu1i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_C");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_C");
    check_field_offset(lv, v3, 2, "BFu9s_BFu1i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_C, BFu9s_BFu1i_C)
//============================================================================


struct  BFu9s_BFu1i_D  {
  unsigned short v1:9;
  unsigned int v2:1;
  double v3;
};
//SIG(1 BFu9s_BFu1i_D) C1{ Fs:9 Fi:1 FL}



static void Test_BFu9s_BFu1i_D()
{
  {
    init_simple_test("BFu9s_BFu1i_D");
    static STRUCT_IF_C BFu9s_BFu1i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu1i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1i_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_D");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu1i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_D, BFu9s_BFu1i_D)
//============================================================================


struct  BFu9s_BFu1i_F  {
  unsigned short v1:9;
  unsigned int v2:1;
  float v3;
};
//SIG(1 BFu9s_BFu1i_F) C1{ Fs:9 Fi:1 Fi}



static void Test_BFu9s_BFu1i_F()
{
  {
    init_simple_test("BFu9s_BFu1i_F");
    static STRUCT_IF_C BFu9s_BFu1i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_F");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_F");
    check_field_offset(lv, v3, 4, "BFu9s_BFu1i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_F, BFu9s_BFu1i_F)
//============================================================================


struct  BFu9s_BFu1i_I  {
  unsigned short v1:9;
  unsigned int v2:1;
  int v3;
};
//SIG(1 BFu9s_BFu1i_I) C1{ Fs:9 Fi:1 Fi}



static void Test_BFu9s_BFu1i_I()
{
  {
    init_simple_test("BFu9s_BFu1i_I");
    static STRUCT_IF_C BFu9s_BFu1i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_I");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_I");
    check_field_offset(lv, v3, 4, "BFu9s_BFu1i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_I, BFu9s_BFu1i_I)
//============================================================================


struct  BFu9s_BFu1i_Ip  {
  unsigned short v1:9;
  unsigned int v2:1;
  int *v3;
};
//SIG(1 BFu9s_BFu1i_Ip) C1{ Fs:9 Fi:1 Fp}



static void Test_BFu9s_BFu1i_Ip()
{
  {
    init_simple_test("BFu9s_BFu1i_Ip");
    static STRUCT_IF_C BFu9s_BFu1i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu1i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_Ip");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu1i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_Ip, BFu9s_BFu1i_Ip)
//============================================================================


struct  BFu9s_BFu1i_L  {
  unsigned short v1:9;
  unsigned int v2:1;
  __tsi64 v3;
};
//SIG(1 BFu9s_BFu1i_L) C1{ Fs:9 Fi:1 FL}



static void Test_BFu9s_BFu1i_L()
{
  {
    init_simple_test("BFu9s_BFu1i_L");
    static STRUCT_IF_C BFu9s_BFu1i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu1i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1i_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_L");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu1i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_L, BFu9s_BFu1i_L)
//============================================================================


struct  BFu9s_BFu1i_S  {
  unsigned short v1:9;
  unsigned int v2:1;
  short v3;
};
//SIG(1 BFu9s_BFu1i_S) C1{ Fs:9 Fi:1 Fs}



static void Test_BFu9s_BFu1i_S()
{
  {
    init_simple_test("BFu9s_BFu1i_S");
    static STRUCT_IF_C BFu9s_BFu1i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_S");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_S");
    check_field_offset(lv, v3, 2, "BFu9s_BFu1i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_S, BFu9s_BFu1i_S)
//============================================================================


struct  BFu9s_BFu1i_Uc  {
  unsigned short v1:9;
  unsigned int v2:1;
  unsigned char v3;
};
//SIG(1 BFu9s_BFu1i_Uc) C1{ Fs:9 Fi:1 Fc}



static void Test_BFu9s_BFu1i_Uc()
{
  {
    init_simple_test("BFu9s_BFu1i_Uc");
    static STRUCT_IF_C BFu9s_BFu1i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_Uc");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_Uc");
    check_field_offset(lv, v3, 2, "BFu9s_BFu1i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_Uc, BFu9s_BFu1i_Uc)
//============================================================================


struct  BFu9s_BFu1i_Ui  {
  unsigned short v1:9;
  unsigned int v2:1;
  unsigned int v3;
};
//SIG(1 BFu9s_BFu1i_Ui) C1{ Fs:9 Fi:1 Fi}



static void Test_BFu9s_BFu1i_Ui()
{
  {
    init_simple_test("BFu9s_BFu1i_Ui");
    static STRUCT_IF_C BFu9s_BFu1i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_Ui");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_Ui");
    check_field_offset(lv, v3, 4, "BFu9s_BFu1i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_Ui, BFu9s_BFu1i_Ui)
//============================================================================


struct  BFu9s_BFu1i_Ul  {
  unsigned short v1:9;
  unsigned int v2:1;
  __tsu64 v3;
};
//SIG(1 BFu9s_BFu1i_Ul) C1{ Fs:9 Fi:1 FL}



static void Test_BFu9s_BFu1i_Ul()
{
  {
    init_simple_test("BFu9s_BFu1i_Ul");
    static STRUCT_IF_C BFu9s_BFu1i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu1i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_Ul");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu1i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_Ul, BFu9s_BFu1i_Ul)
//============================================================================


struct  BFu9s_BFu1i_Us  {
  unsigned short v1:9;
  unsigned int v2:1;
  unsigned short v3;
};
//SIG(1 BFu9s_BFu1i_Us) C1{ Fs:9 Fi:1 Fs}



static void Test_BFu9s_BFu1i_Us()
{
  {
    init_simple_test("BFu9s_BFu1i_Us");
    static STRUCT_IF_C BFu9s_BFu1i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_Us");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_Us");
    check_field_offset(lv, v3, 2, "BFu9s_BFu1i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_Us, BFu9s_BFu1i_Us)
//============================================================================


struct  BFu9s_BFu1i_Vp  {
  unsigned short v1:9;
  unsigned int v2:1;
  void *v3;
};
//SIG(1 BFu9s_BFu1i_Vp) C1{ Fs:9 Fi:1 Fp}



static void Test_BFu9s_BFu1i_Vp()
{
  {
    init_simple_test("BFu9s_BFu1i_Vp");
    static STRUCT_IF_C BFu9s_BFu1i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu1i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_Vp");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu1i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_Vp, BFu9s_BFu1i_Vp)
//============================================================================


struct  BFu9s_BFu1ll  {
  unsigned short v1:9;
  __tsu64 v2:1;
};
//SIG(1 BFu9s_BFu1ll) C1{ Fs:9 FL:1}



static void Test_BFu9s_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll, BFu9s_BFu1ll)
//============================================================================


struct  BFu9s_BFu1ll_BFu15i  {
  unsigned short v1:9;
  __tsu64 v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu9s_BFu1ll_BFu15i) C1{ Fs:9 FL:1 Fi:15}



static void Test_BFu9s_BFu1ll_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu15i");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 2, 15, 1, "BFu9s_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 2, 15, hide_ull(1LL<<14), "BFu9s_BFu1ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu15i, BFu9s_BFu1ll_BFu15i)
//============================================================================


struct  BFu9s_BFu1ll_BFu15ll  {
  unsigned short v1:9;
  __tsu64 v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_BFu1ll_BFu15ll) C1{ Fs:9 FL:1 FL:15}



static void Test_BFu9s_BFu1ll_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 2, 15, 1, "BFu9s_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 2, 15, hide_ull(1LL<<14), "BFu9s_BFu1ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu15ll, BFu9s_BFu1ll_BFu15ll)
//============================================================================


struct  BFu9s_BFu1ll_BFu15s  {
  unsigned short v1:9;
  __tsu64 v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu9s_BFu1ll_BFu15s) C1{ Fs:9 FL:1 Fs:15}



static void Test_BFu9s_BFu1ll_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu15s");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu9s_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu1ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu15s, BFu9s_BFu1ll_BFu15s)
//============================================================================


struct  BFu9s_BFu1ll_BFu16i  {
  unsigned short v1:9;
  __tsu64 v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu9s_BFu1ll_BFu16i) C1{ Fs:9 FL:1 Fi:16}



static void Test_BFu9s_BFu1ll_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu16i");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 2, 16, 1, "BFu9s_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 2, 16, hide_ull(1LL<<15), "BFu9s_BFu1ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu16i, BFu9s_BFu1ll_BFu16i)
//============================================================================


struct  BFu9s_BFu1ll_BFu16ll  {
  unsigned short v1:9;
  __tsu64 v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_BFu1ll_BFu16ll) C1{ Fs:9 FL:1 FL:16}



static void Test_BFu9s_BFu1ll_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 2, 16, 1, "BFu9s_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 2, 16, hide_ull(1LL<<15), "BFu9s_BFu1ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu16ll, BFu9s_BFu1ll_BFu16ll)
//============================================================================


struct  BFu9s_BFu1ll_BFu16s  {
  unsigned short v1:9;
  __tsu64 v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu9s_BFu1ll_BFu16s) C1{ Fs:9 FL:1 Fs:16}



static void Test_BFu9s_BFu1ll_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu16s");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu9s_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu1ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu16s, BFu9s_BFu1ll_BFu16s)
//============================================================================


struct  BFu9s_BFu1ll_BFu17i  {
  unsigned short v1:9;
  __tsu64 v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu9s_BFu1ll_BFu17i) C1{ Fs:9 FL:1 Fi:17}



static void Test_BFu9s_BFu1ll_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu17i");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 2, 17, 1, "BFu9s_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 2, 17, hide_ull(1LL<<16), "BFu9s_BFu1ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu17i, BFu9s_BFu1ll_BFu17i)
//============================================================================


struct  BFu9s_BFu1ll_BFu17ll  {
  unsigned short v1:9;
  __tsu64 v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_BFu1ll_BFu17ll) C1{ Fs:9 FL:1 FL:17}



static void Test_BFu9s_BFu1ll_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 2, 17, 1, "BFu9s_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 2, 17, hide_ull(1LL<<16), "BFu9s_BFu1ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu17ll, BFu9s_BFu1ll_BFu17ll)
//============================================================================


struct  BFu9s_BFu1ll_BFu1c  {
  unsigned short v1:9;
  __tsu64 v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu9s_BFu1ll_BFu1c) C1{ Fs:9 FL:1 Fc:1}



static void Test_BFu9s_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu1c");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 1, 2, 1, 1, "BFu9s_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu1c, BFu9s_BFu1ll_BFu1c)
//============================================================================


struct  BFu9s_BFu1ll_BFu1i  {
  unsigned short v1:9;
  __tsu64 v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu9s_BFu1ll_BFu1i) C1{ Fs:9 FL:1 Fi:1}



static void Test_BFu9s_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu1i");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 1, 2, 1, 1, "BFu9s_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu1i, BFu9s_BFu1ll_BFu1i)
//============================================================================


struct  BFu9s_BFu1ll_BFu1ll  {
  unsigned short v1:9;
  __tsu64 v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_BFu1ll_BFu1ll) C1{ Fs:9 FL:1 FL:1}



static void Test_BFu9s_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 1, 2, 1, 1, "BFu9s_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu1ll, BFu9s_BFu1ll_BFu1ll)
//============================================================================


struct  BFu9s_BFu1ll_BFu1s  {
  unsigned short v1:9;
  __tsu64 v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu9s_BFu1ll_BFu1s) C1{ Fs:9 FL:1 Fs:1}



static void Test_BFu9s_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu1s");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 1, 2, 1, 1, "BFu9s_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu1s, BFu9s_BFu1ll_BFu1s)
//============================================================================


struct  BFu9s_BFu1ll_BFu31i  {
  unsigned short v1:9;
  __tsu64 v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu9s_BFu1ll_BFu31i) C1{ Fs:9 FL:1 Fi:31}



static void Test_BFu9s_BFu1ll_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu31i");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu1ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu31i, BFu9s_BFu1ll_BFu31i)
//============================================================================


struct  BFu9s_BFu1ll_BFu31ll  {
  unsigned short v1:9;
  __tsu64 v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_BFu1ll_BFu31ll) C1{ Fs:9 FL:1 FL:31}



static void Test_BFu9s_BFu1ll_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 2, 31, 1, "BFu9s_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 2, 31, hide_ull(1LL<<30), "BFu9s_BFu1ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu31ll, BFu9s_BFu1ll_BFu31ll)
//============================================================================


struct  BFu9s_BFu1ll_BFu32i  {
  unsigned short v1:9;
  __tsu64 v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu9s_BFu1ll_BFu32i) C1{ Fs:9 FL:1 Fi:32}



static void Test_BFu9s_BFu1ll_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu32i");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu1ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu32i, BFu9s_BFu1ll_BFu32i)
//============================================================================


struct  BFu9s_BFu1ll_BFu32ll  {
  unsigned short v1:9;
  __tsu64 v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_BFu1ll_BFu32ll) C1{ Fs:9 FL:1 FL:32}



static void Test_BFu9s_BFu1ll_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 2, 32, 1, "BFu9s_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 2, 32, hide_ull(1LL<<31), "BFu9s_BFu1ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu32ll, BFu9s_BFu1ll_BFu32ll)
//============================================================================


struct  BFu9s_BFu1ll_BFu33  {
  unsigned short v1:9;
  __tsu64 v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_BFu1ll_BFu33) C1{ Fs:9 FL:1 FL:33}



static void Test_BFu9s_BFu1ll_BFu33()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu33");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, 1, 2, 33, 1, "BFu9s_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, 1, 2, 33, hide_ull(1LL<<32), "BFu9s_BFu1ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu33, BFu9s_BFu1ll_BFu33)
//============================================================================


struct  BFu9s_BFu1ll_BFu7c  {
  unsigned short v1:9;
  __tsu64 v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu9s_BFu1ll_BFu7c) C1{ Fs:9 FL:1 Fc:7}



static void Test_BFu9s_BFu1ll_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu7c");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu9s_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu1ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu7c, BFu9s_BFu1ll_BFu7c)
//============================================================================


struct  BFu9s_BFu1ll_BFu7i  {
  unsigned short v1:9;
  __tsu64 v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu9s_BFu1ll_BFu7i) C1{ Fs:9 FL:1 Fi:7}



static void Test_BFu9s_BFu1ll_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu7i");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 2, 7, 1, "BFu9s_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 2, 7, hide_ull(1LL<<6), "BFu9s_BFu1ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu7i, BFu9s_BFu1ll_BFu7i)
//============================================================================


struct  BFu9s_BFu1ll_BFu7ll  {
  unsigned short v1:9;
  __tsu64 v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_BFu1ll_BFu7ll) C1{ Fs:9 FL:1 FL:7}



static void Test_BFu9s_BFu1ll_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 2, 7, 1, "BFu9s_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 2, 7, hide_ull(1LL<<6), "BFu9s_BFu1ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu7ll, BFu9s_BFu1ll_BFu7ll)
//============================================================================


struct  BFu9s_BFu1ll_BFu7s  {
  unsigned short v1:9;
  __tsu64 v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu9s_BFu1ll_BFu7s) C1{ Fs:9 FL:1 Fs:7}



static void Test_BFu9s_BFu1ll_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu7s");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu9s_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu1ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu7s, BFu9s_BFu1ll_BFu7s)
//============================================================================


struct  BFu9s_BFu1ll_BFu8c  {
  unsigned short v1:9;
  __tsu64 v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu9s_BFu1ll_BFu8c) C1{ Fs:9 FL:1 Fc:8}



static void Test_BFu9s_BFu1ll_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu8c");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu9s_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu1ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu8c, BFu9s_BFu1ll_BFu8c)
//============================================================================


struct  BFu9s_BFu1ll_BFu8i  {
  unsigned short v1:9;
  __tsu64 v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu9s_BFu1ll_BFu8i) C1{ Fs:9 FL:1 Fi:8}



static void Test_BFu9s_BFu1ll_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu8i");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 2, 8, 1, "BFu9s_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 2, 8, hide_ull(1LL<<7), "BFu9s_BFu1ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu8i, BFu9s_BFu1ll_BFu8i)
//============================================================================


struct  BFu9s_BFu1ll_BFu8ll  {
  unsigned short v1:9;
  __tsu64 v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_BFu1ll_BFu8ll) C1{ Fs:9 FL:1 FL:8}



static void Test_BFu9s_BFu1ll_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 2, 8, 1, "BFu9s_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 2, 8, hide_ull(1LL<<7), "BFu9s_BFu1ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu8ll, BFu9s_BFu1ll_BFu8ll)
//============================================================================


struct  BFu9s_BFu1ll_BFu8s  {
  unsigned short v1:9;
  __tsu64 v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu9s_BFu1ll_BFu8s) C1{ Fs:9 FL:1 Fs:8}



static void Test_BFu9s_BFu1ll_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu8s");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu9s_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu1ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu8s, BFu9s_BFu1ll_BFu8s)
//============================================================================


struct  BFu9s_BFu1ll_BFu9i  {
  unsigned short v1:9;
  __tsu64 v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFu1ll_BFu9i) C1{ Fs:9 FL:1 Fi:9}



static void Test_BFu9s_BFu1ll_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu9i");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 2, 9, 1, "BFu9s_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu9i, BFu9s_BFu1ll_BFu9i)
//============================================================================


struct  BFu9s_BFu1ll_BFu9ll  {
  unsigned short v1:9;
  __tsu64 v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFu1ll_BFu9ll) C1{ Fs:9 FL:1 FL:9}



static void Test_BFu9s_BFu1ll_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 2, 9, 1, "BFu9s_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu9ll, BFu9s_BFu1ll_BFu9ll)
//============================================================================


struct  BFu9s_BFu1ll_BFu9s  {
  unsigned short v1:9;
  __tsu64 v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFu1ll_BFu9s) C1{ Fs:9 FL:1 Fs:9}



static void Test_BFu9s_BFu1ll_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu9s");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu9s_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu9s, BFu9s_BFu1ll_BFu9s)
//============================================================================


struct  BFu9s_BFu1ll_C  {
  unsigned short v1:9;
  __tsu64 v2:1;
  char v3;
};
//SIG(1 BFu9s_BFu1ll_C) C1{ Fs:9 FL:1 Fc}



static void Test_BFu9s_BFu1ll_C()
{
  {
    init_simple_test("BFu9s_BFu1ll_C");
    static STRUCT_IF_C BFu9s_BFu1ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_C");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_C");
    check_field_offset(lv, v3, 2, "BFu9s_BFu1ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_C, BFu9s_BFu1ll_C)
//============================================================================


struct  BFu9s_BFu1ll_D  {
  unsigned short v1:9;
  __tsu64 v2:1;
  double v3;
};
//SIG(1 BFu9s_BFu1ll_D) C1{ Fs:9 FL:1 FL}



static void Test_BFu9s_BFu1ll_D()
{
  {
    init_simple_test("BFu9s_BFu1ll_D");
    static STRUCT_IF_C BFu9s_BFu1ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu1ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_D");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu1ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_D, BFu9s_BFu1ll_D)
//============================================================================


struct  BFu9s_BFu1ll_F  {
  unsigned short v1:9;
  __tsu64 v2:1;
  float v3;
};
//SIG(1 BFu9s_BFu1ll_F) C1{ Fs:9 FL:1 Fi}



static void Test_BFu9s_BFu1ll_F()
{
  {
    init_simple_test("BFu9s_BFu1ll_F");
    static STRUCT_IF_C BFu9s_BFu1ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_F");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_F");
    check_field_offset(lv, v3, 4, "BFu9s_BFu1ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_F, BFu9s_BFu1ll_F)
//============================================================================


struct  BFu9s_BFu1ll_I  {
  unsigned short v1:9;
  __tsu64 v2:1;
  int v3;
};
//SIG(1 BFu9s_BFu1ll_I) C1{ Fs:9 FL:1 Fi}



static void Test_BFu9s_BFu1ll_I()
{
  {
    init_simple_test("BFu9s_BFu1ll_I");
    static STRUCT_IF_C BFu9s_BFu1ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_I");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_I");
    check_field_offset(lv, v3, 4, "BFu9s_BFu1ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_I, BFu9s_BFu1ll_I)
//============================================================================


struct  BFu9s_BFu1ll_Ip  {
  unsigned short v1:9;
  __tsu64 v2:1;
  int *v3;
};
//SIG(1 BFu9s_BFu1ll_Ip) C1{ Fs:9 FL:1 Fp}



static void Test_BFu9s_BFu1ll_Ip()
{
  {
    init_simple_test("BFu9s_BFu1ll_Ip");
    static STRUCT_IF_C BFu9s_BFu1ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu1ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_Ip");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu1ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_Ip, BFu9s_BFu1ll_Ip)
//============================================================================


struct  BFu9s_BFu1ll_L  {
  unsigned short v1:9;
  __tsu64 v2:1;
  __tsi64 v3;
};
//SIG(1 BFu9s_BFu1ll_L) C1{ Fs:9 FL:1 FL}



static void Test_BFu9s_BFu1ll_L()
{
  {
    init_simple_test("BFu9s_BFu1ll_L");
    static STRUCT_IF_C BFu9s_BFu1ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu1ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_L");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu1ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_L, BFu9s_BFu1ll_L)
//============================================================================


struct  BFu9s_BFu1ll_S  {
  unsigned short v1:9;
  __tsu64 v2:1;
  short v3;
};
//SIG(1 BFu9s_BFu1ll_S) C1{ Fs:9 FL:1 Fs}



static void Test_BFu9s_BFu1ll_S()
{
  {
    init_simple_test("BFu9s_BFu1ll_S");
    static STRUCT_IF_C BFu9s_BFu1ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_S");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_S");
    check_field_offset(lv, v3, 2, "BFu9s_BFu1ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_S, BFu9s_BFu1ll_S)
//============================================================================


struct  BFu9s_BFu1ll_Uc  {
  unsigned short v1:9;
  __tsu64 v2:1;
  unsigned char v3;
};
//SIG(1 BFu9s_BFu1ll_Uc) C1{ Fs:9 FL:1 Fc}



static void Test_BFu9s_BFu1ll_Uc()
{
  {
    init_simple_test("BFu9s_BFu1ll_Uc");
    static STRUCT_IF_C BFu9s_BFu1ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_Uc");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_Uc");
    check_field_offset(lv, v3, 2, "BFu9s_BFu1ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_Uc, BFu9s_BFu1ll_Uc)
//============================================================================


struct  BFu9s_BFu1ll_Ui  {
  unsigned short v1:9;
  __tsu64 v2:1;
  unsigned int v3;
};
//SIG(1 BFu9s_BFu1ll_Ui) C1{ Fs:9 FL:1 Fi}



static void Test_BFu9s_BFu1ll_Ui()
{
  {
    init_simple_test("BFu9s_BFu1ll_Ui");
    static STRUCT_IF_C BFu9s_BFu1ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_Ui");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_Ui");
    check_field_offset(lv, v3, 4, "BFu9s_BFu1ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_Ui, BFu9s_BFu1ll_Ui)
//============================================================================


struct  BFu9s_BFu1ll_Ul  {
  unsigned short v1:9;
  __tsu64 v2:1;
  __tsu64 v3;
};
//SIG(1 BFu9s_BFu1ll_Ul) C1{ Fs:9 FL:1 FL}



static void Test_BFu9s_BFu1ll_Ul()
{
  {
    init_simple_test("BFu9s_BFu1ll_Ul");
    static STRUCT_IF_C BFu9s_BFu1ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu1ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_Ul");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu1ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_Ul, BFu9s_BFu1ll_Ul)
//============================================================================


struct  BFu9s_BFu1ll_Us  {
  unsigned short v1:9;
  __tsu64 v2:1;
  unsigned short v3;
};
//SIG(1 BFu9s_BFu1ll_Us) C1{ Fs:9 FL:1 Fs}



static void Test_BFu9s_BFu1ll_Us()
{
  {
    init_simple_test("BFu9s_BFu1ll_Us");
    static STRUCT_IF_C BFu9s_BFu1ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_Us");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_Us");
    check_field_offset(lv, v3, 2, "BFu9s_BFu1ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_Us, BFu9s_BFu1ll_Us)
//============================================================================


struct  BFu9s_BFu1ll_Vp  {
  unsigned short v1:9;
  __tsu64 v2:1;
  void *v3;
};
//SIG(1 BFu9s_BFu1ll_Vp) C1{ Fs:9 FL:1 Fp}



static void Test_BFu9s_BFu1ll_Vp()
{
  {
    init_simple_test("BFu9s_BFu1ll_Vp");
    static STRUCT_IF_C BFu9s_BFu1ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu1ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_Vp");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu1ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_Vp, BFu9s_BFu1ll_Vp)
//============================================================================


struct  BFu9s_BFu1s  {
  unsigned short v1:9;
  unsigned short v2:1;
};
//SIG(1 BFu9s_BFu1s) C1{ Fs:9 Fs:1}



static void Test_BFu9s_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu1s");
    static STRUCT_IF_C BFu9s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu9s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s, BFu9s_BFu1s)
//============================================================================


struct  BFu9s_BFu1s_BFu15i  {
  unsigned short v1:9;
  unsigned short v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu9s_BFu1s_BFu15i) C1{ Fs:9 Fs:1 Fi:15}



static void Test_BFu9s_BFu1s_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu15i");
    static STRUCT_IF_C BFu9s_BFu1s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 1, 2, 15, 1, "BFu9s_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 1, 2, 15, hide_ull(1LL<<14), "BFu9s_BFu1s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu15i, BFu9s_BFu1s_BFu15i)
//============================================================================


struct  BFu9s_BFu1s_BFu15ll  {
  unsigned short v1:9;
  unsigned short v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_BFu1s_BFu15ll) C1{ Fs:9 Fs:1 FL:15}



static void Test_BFu9s_BFu1s_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu1s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 2, 15, 1, "BFu9s_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 2, 15, hide_ull(1LL<<14), "BFu9s_BFu1s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu15ll, BFu9s_BFu1s_BFu15ll)
//============================================================================


struct  BFu9s_BFu1s_BFu15s  {
  unsigned short v1:9;
  unsigned short v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu9s_BFu1s_BFu15s) C1{ Fs:9 Fs:1 Fs:15}



static void Test_BFu9s_BFu1s_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu15s");
    static STRUCT_IF_C BFu9s_BFu1s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu9s_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu1s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu15s, BFu9s_BFu1s_BFu15s)
//============================================================================


struct  BFu9s_BFu1s_BFu16i  {
  unsigned short v1:9;
  unsigned short v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu9s_BFu1s_BFu16i) C1{ Fs:9 Fs:1 Fi:16}



static void Test_BFu9s_BFu1s_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu16i");
    static STRUCT_IF_C BFu9s_BFu1s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 1, 2, 16, 1, "BFu9s_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 1, 2, 16, hide_ull(1LL<<15), "BFu9s_BFu1s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu16i, BFu9s_BFu1s_BFu16i)
//============================================================================


struct  BFu9s_BFu1s_BFu16ll  {
  unsigned short v1:9;
  unsigned short v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_BFu1s_BFu16ll) C1{ Fs:9 Fs:1 FL:16}



static void Test_BFu9s_BFu1s_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu1s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 2, 16, 1, "BFu9s_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 2, 16, hide_ull(1LL<<15), "BFu9s_BFu1s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu16ll, BFu9s_BFu1s_BFu16ll)
//============================================================================


struct  BFu9s_BFu1s_BFu16s  {
  unsigned short v1:9;
  unsigned short v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu9s_BFu1s_BFu16s) C1{ Fs:9 Fs:1 Fs:16}



static void Test_BFu9s_BFu1s_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu16s");
    static STRUCT_IF_C BFu9s_BFu1s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu9s_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu1s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu16s, BFu9s_BFu1s_BFu16s)
//============================================================================


struct  BFu9s_BFu1s_BFu17i  {
  unsigned short v1:9;
  unsigned short v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu9s_BFu1s_BFu17i) C1{ Fs:9 Fs:1 Fi:17}



static void Test_BFu9s_BFu1s_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu17i");
    static STRUCT_IF_C BFu9s_BFu1s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 1, 2, 17, 1, "BFu9s_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 1, 2, 17, hide_ull(1LL<<16), "BFu9s_BFu1s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu17i, BFu9s_BFu1s_BFu17i)
//============================================================================


struct  BFu9s_BFu1s_BFu17ll  {
  unsigned short v1:9;
  unsigned short v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_BFu1s_BFu17ll) C1{ Fs:9 Fs:1 FL:17}



static void Test_BFu9s_BFu1s_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu1s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 2, 17, 1, "BFu9s_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 2, 17, hide_ull(1LL<<16), "BFu9s_BFu1s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu17ll, BFu9s_BFu1s_BFu17ll)
//============================================================================


struct  BFu9s_BFu1s_BFu1c  {
  unsigned short v1:9;
  unsigned short v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu9s_BFu1s_BFu1c) C1{ Fs:9 Fs:1 Fc:1}



static void Test_BFu9s_BFu1s_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu1c");
    static STRUCT_IF_C BFu9s_BFu1s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu9s_BFu1s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 1, 2, 1, 1, "BFu9s_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu1c, BFu9s_BFu1s_BFu1c)
//============================================================================


struct  BFu9s_BFu1s_BFu1i  {
  unsigned short v1:9;
  unsigned short v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu9s_BFu1s_BFu1i) C1{ Fs:9 Fs:1 Fi:1}



static void Test_BFu9s_BFu1s_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu1i");
    static STRUCT_IF_C BFu9s_BFu1s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 1, 2, 1, 1, "BFu9s_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu1i, BFu9s_BFu1s_BFu1i)
//============================================================================


struct  BFu9s_BFu1s_BFu1ll  {
  unsigned short v1:9;
  unsigned short v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_BFu1s_BFu1ll) C1{ Fs:9 Fs:1 FL:1}



static void Test_BFu9s_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 1, 2, 1, 1, "BFu9s_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu1ll, BFu9s_BFu1s_BFu1ll)
//============================================================================


struct  BFu9s_BFu1s_BFu1s  {
  unsigned short v1:9;
  unsigned short v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu9s_BFu1s_BFu1s) C1{ Fs:9 Fs:1 Fs:1}



static void Test_BFu9s_BFu1s_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu1s");
    static STRUCT_IF_C BFu9s_BFu1s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu9s_BFu1s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 1, 2, 1, 1, "BFu9s_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu1s, BFu9s_BFu1s_BFu1s)
//============================================================================


struct  BFu9s_BFu1s_BFu31i  {
  unsigned short v1:9;
  unsigned short v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu9s_BFu1s_BFu31i) C1{ Fs:9 Fs:1 Fi:31}



static void Test_BFu9s_BFu1s_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu31i");
    static STRUCT_IF_C BFu9s_BFu1s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu1s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu31i, BFu9s_BFu1s_BFu31i)
//============================================================================


struct  BFu9s_BFu1s_BFu31ll  {
  unsigned short v1:9;
  unsigned short v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_BFu1s_BFu31ll) C1{ Fs:9 Fs:1 FL:31}



static void Test_BFu9s_BFu1s_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu1s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 2, 31, 1, "BFu9s_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 2, 31, hide_ull(1LL<<30), "BFu9s_BFu1s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu31ll, BFu9s_BFu1s_BFu31ll)
//============================================================================


struct  BFu9s_BFu1s_BFu32i  {
  unsigned short v1:9;
  unsigned short v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu9s_BFu1s_BFu32i) C1{ Fs:9 Fs:1 Fi:32}



static void Test_BFu9s_BFu1s_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu32i");
    static STRUCT_IF_C BFu9s_BFu1s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu1s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu32i, BFu9s_BFu1s_BFu32i)
//============================================================================


struct  BFu9s_BFu1s_BFu32ll  {
  unsigned short v1:9;
  unsigned short v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_BFu1s_BFu32ll) C1{ Fs:9 Fs:1 FL:32}



static void Test_BFu9s_BFu1s_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu1s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 2, 32, 1, "BFu9s_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 2, 32, hide_ull(1LL<<31), "BFu9s_BFu1s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu32ll, BFu9s_BFu1s_BFu32ll)
//============================================================================


struct  BFu9s_BFu1s_BFu33  {
  unsigned short v1:9;
  unsigned short v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_BFu1s_BFu33) C1{ Fs:9 Fs:1 FL:33}



static void Test_BFu9s_BFu1s_BFu33()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu33");
    static STRUCT_IF_C BFu9s_BFu1s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu33");
    set_bf_and_test(lv, v3, 1, 2, 33, 1, "BFu9s_BFu1s_BFu33");
    set_bf_and_test(lv, v3, 1, 2, 33, hide_ull(1LL<<32), "BFu9s_BFu1s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu33, BFu9s_BFu1s_BFu33)
//============================================================================


struct  BFu9s_BFu1s_BFu7c  {
  unsigned short v1:9;
  unsigned short v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu9s_BFu1s_BFu7c) C1{ Fs:9 Fs:1 Fc:7}



static void Test_BFu9s_BFu1s_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu7c");
    static STRUCT_IF_C BFu9s_BFu1s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu9s_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu1s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu7c, BFu9s_BFu1s_BFu7c)
//============================================================================


struct  BFu9s_BFu1s_BFu7i  {
  unsigned short v1:9;
  unsigned short v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu9s_BFu1s_BFu7i) C1{ Fs:9 Fs:1 Fi:7}



static void Test_BFu9s_BFu1s_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu7i");
    static STRUCT_IF_C BFu9s_BFu1s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 1, 2, 7, 1, "BFu9s_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 1, 2, 7, hide_ull(1LL<<6), "BFu9s_BFu1s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu7i, BFu9s_BFu1s_BFu7i)
//============================================================================


struct  BFu9s_BFu1s_BFu7ll  {
  unsigned short v1:9;
  unsigned short v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_BFu1s_BFu7ll) C1{ Fs:9 Fs:1 FL:7}



static void Test_BFu9s_BFu1s_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu1s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 2, 7, 1, "BFu9s_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 2, 7, hide_ull(1LL<<6), "BFu9s_BFu1s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu7ll, BFu9s_BFu1s_BFu7ll)
//============================================================================


struct  BFu9s_BFu1s_BFu7s  {
  unsigned short v1:9;
  unsigned short v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu9s_BFu1s_BFu7s) C1{ Fs:9 Fs:1 Fs:7}



static void Test_BFu9s_BFu1s_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu7s");
    static STRUCT_IF_C BFu9s_BFu1s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu9s_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu1s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu7s, BFu9s_BFu1s_BFu7s)
//============================================================================


struct  BFu9s_BFu1s_BFu8c  {
  unsigned short v1:9;
  unsigned short v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu9s_BFu1s_BFu8c) C1{ Fs:9 Fs:1 Fc:8}



static void Test_BFu9s_BFu1s_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu8c");
    static STRUCT_IF_C BFu9s_BFu1s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu9s_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu1s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu8c, BFu9s_BFu1s_BFu8c)
//============================================================================


struct  BFu9s_BFu1s_BFu8i  {
  unsigned short v1:9;
  unsigned short v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu9s_BFu1s_BFu8i) C1{ Fs:9 Fs:1 Fi:8}



static void Test_BFu9s_BFu1s_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu8i");
    static STRUCT_IF_C BFu9s_BFu1s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 1, 2, 8, 1, "BFu9s_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 1, 2, 8, hide_ull(1LL<<7), "BFu9s_BFu1s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu8i, BFu9s_BFu1s_BFu8i)
//============================================================================


struct  BFu9s_BFu1s_BFu8ll  {
  unsigned short v1:9;
  unsigned short v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_BFu1s_BFu8ll) C1{ Fs:9 Fs:1 FL:8}



static void Test_BFu9s_BFu1s_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu1s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 2, 8, 1, "BFu9s_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 2, 8, hide_ull(1LL<<7), "BFu9s_BFu1s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu8ll, BFu9s_BFu1s_BFu8ll)
//============================================================================


struct  BFu9s_BFu1s_BFu8s  {
  unsigned short v1:9;
  unsigned short v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu9s_BFu1s_BFu8s) C1{ Fs:9 Fs:1 Fs:8}



static void Test_BFu9s_BFu1s_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu8s");
    static STRUCT_IF_C BFu9s_BFu1s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu9s_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu1s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu8s, BFu9s_BFu1s_BFu8s)
//============================================================================


struct  BFu9s_BFu1s_BFu9i  {
  unsigned short v1:9;
  unsigned short v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFu1s_BFu9i) C1{ Fs:9 Fs:1 Fi:9}



static void Test_BFu9s_BFu1s_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu9i");
    static STRUCT_IF_C BFu9s_BFu1s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 1, 2, 9, 1, "BFu9s_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 1, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu9i, BFu9s_BFu1s_BFu9i)
//============================================================================


struct  BFu9s_BFu1s_BFu9ll  {
  unsigned short v1:9;
  unsigned short v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFu1s_BFu9ll) C1{ Fs:9 Fs:1 FL:9}



static void Test_BFu9s_BFu1s_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu1s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 2, 9, 1, "BFu9s_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu9ll, BFu9s_BFu1s_BFu9ll)
//============================================================================


struct  BFu9s_BFu1s_BFu9s  {
  unsigned short v1:9;
  unsigned short v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFu1s_BFu9s) C1{ Fs:9 Fs:1 Fs:9}



static void Test_BFu9s_BFu1s_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu9s");
    static STRUCT_IF_C BFu9s_BFu1s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu9s_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu9s, BFu9s_BFu1s_BFu9s)
//============================================================================


struct  BFu9s_BFu1s_C  {
  unsigned short v1:9;
  unsigned short v2:1;
  char v3;
};
//SIG(1 BFu9s_BFu1s_C) C1{ Fs:9 Fs:1 Fc}



static void Test_BFu9s_BFu1s_C()
{
  {
    init_simple_test("BFu9s_BFu1s_C");
    static STRUCT_IF_C BFu9s_BFu1s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1s_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_C");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_C");
    check_field_offset(lv, v3, 2, "BFu9s_BFu1s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_C, BFu9s_BFu1s_C)
//============================================================================


struct  BFu9s_BFu1s_D  {
  unsigned short v1:9;
  unsigned short v2:1;
  double v3;
};
//SIG(1 BFu9s_BFu1s_D) C1{ Fs:9 Fs:1 FL}



static void Test_BFu9s_BFu1s_D()
{
  {
    init_simple_test("BFu9s_BFu1s_D");
    static STRUCT_IF_C BFu9s_BFu1s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu1s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1s_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_D");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu1s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_D, BFu9s_BFu1s_D)
//============================================================================


struct  BFu9s_BFu1s_F  {
  unsigned short v1:9;
  unsigned short v2:1;
  float v3;
};
//SIG(1 BFu9s_BFu1s_F) C1{ Fs:9 Fs:1 Fi}



static void Test_BFu9s_BFu1s_F()
{
  {
    init_simple_test("BFu9s_BFu1s_F");
    static STRUCT_IF_C BFu9s_BFu1s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1s_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_F");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_F");
    check_field_offset(lv, v3, 4, "BFu9s_BFu1s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_F, BFu9s_BFu1s_F)
//============================================================================


struct  BFu9s_BFu1s_I  {
  unsigned short v1:9;
  unsigned short v2:1;
  int v3;
};
//SIG(1 BFu9s_BFu1s_I) C1{ Fs:9 Fs:1 Fi}



static void Test_BFu9s_BFu1s_I()
{
  {
    init_simple_test("BFu9s_BFu1s_I");
    static STRUCT_IF_C BFu9s_BFu1s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1s_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_I");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_I");
    check_field_offset(lv, v3, 4, "BFu9s_BFu1s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_I, BFu9s_BFu1s_I)
//============================================================================


struct  BFu9s_BFu1s_Ip  {
  unsigned short v1:9;
  unsigned short v2:1;
  int *v3;
};
//SIG(1 BFu9s_BFu1s_Ip) C1{ Fs:9 Fs:1 Fp}



static void Test_BFu9s_BFu1s_Ip()
{
  {
    init_simple_test("BFu9s_BFu1s_Ip");
    static STRUCT_IF_C BFu9s_BFu1s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu1s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_Ip");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu1s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_Ip, BFu9s_BFu1s_Ip)
//============================================================================


struct  BFu9s_BFu1s_L  {
  unsigned short v1:9;
  unsigned short v2:1;
  __tsi64 v3;
};
//SIG(1 BFu9s_BFu1s_L) C1{ Fs:9 Fs:1 FL}



static void Test_BFu9s_BFu1s_L()
{
  {
    init_simple_test("BFu9s_BFu1s_L");
    static STRUCT_IF_C BFu9s_BFu1s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu1s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1s_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_L");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu1s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_L, BFu9s_BFu1s_L)
//============================================================================


struct  BFu9s_BFu1s_S  {
  unsigned short v1:9;
  unsigned short v2:1;
  short v3;
};
//SIG(1 BFu9s_BFu1s_S) C1{ Fs:9 Fs:1 Fs}



static void Test_BFu9s_BFu1s_S()
{
  {
    init_simple_test("BFu9s_BFu1s_S");
    static STRUCT_IF_C BFu9s_BFu1s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1s_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_S");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_S");
    check_field_offset(lv, v3, 2, "BFu9s_BFu1s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_S, BFu9s_BFu1s_S)
//============================================================================


struct  BFu9s_BFu1s_Uc  {
  unsigned short v1:9;
  unsigned short v2:1;
  unsigned char v3;
};
//SIG(1 BFu9s_BFu1s_Uc) C1{ Fs:9 Fs:1 Fc}



static void Test_BFu9s_BFu1s_Uc()
{
  {
    init_simple_test("BFu9s_BFu1s_Uc");
    static STRUCT_IF_C BFu9s_BFu1s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_Uc");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_Uc");
    check_field_offset(lv, v3, 2, "BFu9s_BFu1s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_Uc, BFu9s_BFu1s_Uc)
//============================================================================


struct  BFu9s_BFu1s_Ui  {
  unsigned short v1:9;
  unsigned short v2:1;
  unsigned int v3;
};
//SIG(1 BFu9s_BFu1s_Ui) C1{ Fs:9 Fs:1 Fi}



static void Test_BFu9s_BFu1s_Ui()
{
  {
    init_simple_test("BFu9s_BFu1s_Ui");
    static STRUCT_IF_C BFu9s_BFu1s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu1s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_Ui");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_Ui");
    check_field_offset(lv, v3, 4, "BFu9s_BFu1s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_Ui, BFu9s_BFu1s_Ui)
//============================================================================


struct  BFu9s_BFu1s_Ul  {
  unsigned short v1:9;
  unsigned short v2:1;
  __tsu64 v3;
};
//SIG(1 BFu9s_BFu1s_Ul) C1{ Fs:9 Fs:1 FL}



static void Test_BFu9s_BFu1s_Ul()
{
  {
    init_simple_test("BFu9s_BFu1s_Ul");
    static STRUCT_IF_C BFu9s_BFu1s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu1s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_Ul");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu1s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_Ul, BFu9s_BFu1s_Ul)
//============================================================================


struct  BFu9s_BFu1s_Us  {
  unsigned short v1:9;
  unsigned short v2:1;
  unsigned short v3;
};
//SIG(1 BFu9s_BFu1s_Us) C1{ Fs:9 Fs:1 Fs}



static void Test_BFu9s_BFu1s_Us()
{
  {
    init_simple_test("BFu9s_BFu1s_Us");
    static STRUCT_IF_C BFu9s_BFu1s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_Us");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_Us");
    check_field_offset(lv, v3, 2, "BFu9s_BFu1s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_Us, BFu9s_BFu1s_Us)
//============================================================================


struct  BFu9s_BFu1s_Vp  {
  unsigned short v1:9;
  unsigned short v2:1;
  void *v3;
};
//SIG(1 BFu9s_BFu1s_Vp) C1{ Fs:9 Fs:1 Fp}



static void Test_BFu9s_BFu1s_Vp()
{
  {
    init_simple_test("BFu9s_BFu1s_Vp");
    static STRUCT_IF_C BFu9s_BFu1s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu1s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_Vp");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu1s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_Vp, BFu9s_BFu1s_Vp)
//============================================================================


struct  BFu9s_BFu31i  {
  unsigned short v1:9;
  unsigned int v2:31;
};
//SIG(1 BFu9s_BFu31i) C1{ Fs:9 Fi:31}



static void Test_BFu9s_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu31i");
    static STRUCT_IF_C BFu9s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i, BFu9s_BFu31i)
//============================================================================


struct  BFu9s_BFu31i_BFu15i  {
  unsigned short v1:9;
  unsigned int v2:31;
  unsigned int v3:15;
};
//SIG(1 BFu9s_BFu31i_BFu15i) C1{ Fs:9 Fi:31 Fi:15}



static void Test_BFu9s_BFu31i_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu15i");
    static STRUCT_IF_C BFu9s_BFu31i_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu31i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu9s_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu31i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu15i, BFu9s_BFu31i_BFu15i)
//============================================================================


struct  BFu9s_BFu31i_BFu15ll  {
  unsigned short v1:9;
  unsigned int v2:31;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_BFu31i_BFu15ll) C1{ Fs:9 Fi:31 FL:15}



static void Test_BFu9s_BFu31i_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu31i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu31i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, 1, "BFu9s_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, hide_ull(1LL<<14), "BFu9s_BFu31i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu15ll, BFu9s_BFu31i_BFu15ll)
//============================================================================


struct  BFu9s_BFu31i_BFu15s  {
  unsigned short v1:9;
  unsigned int v2:31;
  unsigned short v3:15;
};
//SIG(1 BFu9s_BFu31i_BFu15s) C1{ Fs:9 Fi:31 Fs:15}



static void Test_BFu9s_BFu31i_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu15s");
    static STRUCT_IF_C BFu9s_BFu31i_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu31i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu9s_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu31i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu15s, BFu9s_BFu31i_BFu15s)
//============================================================================


struct  BFu9s_BFu31i_BFu16i  {
  unsigned short v1:9;
  unsigned int v2:31;
  unsigned int v3:16;
};
//SIG(1 BFu9s_BFu31i_BFu16i) C1{ Fs:9 Fi:31 Fi:16}



static void Test_BFu9s_BFu31i_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu16i");
    static STRUCT_IF_C BFu9s_BFu31i_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu31i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu9s_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu31i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu16i, BFu9s_BFu31i_BFu16i)
//============================================================================


struct  BFu9s_BFu31i_BFu16ll  {
  unsigned short v1:9;
  unsigned int v2:31;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_BFu31i_BFu16ll) C1{ Fs:9 Fi:31 FL:16}



static void Test_BFu9s_BFu31i_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu31i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu31i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, 1, "BFu9s_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, hide_ull(1LL<<15), "BFu9s_BFu31i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu16ll, BFu9s_BFu31i_BFu16ll)
//============================================================================


struct  BFu9s_BFu31i_BFu16s  {
  unsigned short v1:9;
  unsigned int v2:31;
  unsigned short v3:16;
};
//SIG(1 BFu9s_BFu31i_BFu16s) C1{ Fs:9 Fi:31 Fs:16}



static void Test_BFu9s_BFu31i_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu16s");
    static STRUCT_IF_C BFu9s_BFu31i_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu31i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu9s_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu31i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu16s, BFu9s_BFu31i_BFu16s)
//============================================================================


struct  BFu9s_BFu31i_BFu17i  {
  unsigned short v1:9;
  unsigned int v2:31;
  unsigned int v3:17;
};
//SIG(1 BFu9s_BFu31i_BFu17i) C1{ Fs:9 Fi:31 Fi:17}



static void Test_BFu9s_BFu31i_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu17i");
    static STRUCT_IF_C BFu9s_BFu31i_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu31i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu9s_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu31i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu17i, BFu9s_BFu31i_BFu17i)
//============================================================================


struct  BFu9s_BFu31i_BFu17ll  {
  unsigned short v1:9;
  unsigned int v2:31;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_BFu31i_BFu17ll) C1{ Fs:9 Fi:31 FL:17}



static void Test_BFu9s_BFu31i_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu31i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu31i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, 1, "BFu9s_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, hide_ull(1LL<<16), "BFu9s_BFu31i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu17ll, BFu9s_BFu31i_BFu17ll)
//============================================================================


struct  BFu9s_BFu31i_BFu1c  {
  unsigned short v1:9;
  unsigned int v2:31;
  unsigned char v3:1;
};
//SIG(1 BFu9s_BFu31i_BFu1c) C1{ Fs:9 Fi:31 Fc:1}



static void Test_BFu9s_BFu31i_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu1c");
    static STRUCT_IF_C BFu9s_BFu31i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu1c");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu9s_BFu31i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu1c, BFu9s_BFu31i_BFu1c)
//============================================================================


struct  BFu9s_BFu31i_BFu1i  {
  unsigned short v1:9;
  unsigned int v2:31;
  unsigned int v3:1;
};
//SIG(1 BFu9s_BFu31i_BFu1i) C1{ Fs:9 Fi:31 Fi:1}



static void Test_BFu9s_BFu31i_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu1i");
    static STRUCT_IF_C BFu9s_BFu31i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu1i");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu9s_BFu31i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu1i, BFu9s_BFu31i_BFu1i)
//============================================================================


struct  BFu9s_BFu31i_BFu1ll  {
  unsigned short v1:9;
  unsigned int v2:31;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_BFu31i_BFu1ll) C1{ Fs:9 Fi:31 FL:1}



static void Test_BFu9s_BFu31i_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu31i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu1ll");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu9s_BFu31i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu1ll, BFu9s_BFu31i_BFu1ll)
//============================================================================


struct  BFu9s_BFu31i_BFu1s  {
  unsigned short v1:9;
  unsigned int v2:31;
  unsigned short v3:1;
};
//SIG(1 BFu9s_BFu31i_BFu1s) C1{ Fs:9 Fi:31 Fs:1}



static void Test_BFu9s_BFu31i_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu1s");
    static STRUCT_IF_C BFu9s_BFu31i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu1s");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu9s_BFu31i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu1s, BFu9s_BFu31i_BFu1s)
//============================================================================


struct  BFu9s_BFu31i_BFu31i  {
  unsigned short v1:9;
  unsigned int v2:31;
  unsigned int v3:31;
};
//SIG(1 BFu9s_BFu31i_BFu31i) C1{ Fs:9 Fi:31 Fi:31}



static void Test_BFu9s_BFu31i_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu31i");
    static STRUCT_IF_C BFu9s_BFu31i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu31i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu9s_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu31i, BFu9s_BFu31i_BFu31i)
//============================================================================


struct  BFu9s_BFu31i_BFu31ll  {
  unsigned short v1:9;
  unsigned int v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_BFu31i_BFu31ll) C1{ Fs:9 Fi:31 FL:31}



static void Test_BFu9s_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu31i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu9s_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu31ll, BFu9s_BFu31i_BFu31ll)
//============================================================================


struct  BFu9s_BFu31i_BFu32i  {
  unsigned short v1:9;
  unsigned int v2:31;
  unsigned int v3:32;
};
//SIG(1 BFu9s_BFu31i_BFu32i) C1{ Fs:9 Fi:31 Fi:32}



static void Test_BFu9s_BFu31i_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu32i");
    static STRUCT_IF_C BFu9s_BFu31i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu31i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu9s_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu31i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu32i, BFu9s_BFu31i_BFu32i)
//============================================================================


struct  BFu9s_BFu31i_BFu32ll  {
  unsigned short v1:9;
  unsigned int v2:31;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_BFu31i_BFu32ll) C1{ Fs:9 Fi:31 FL:32}



static void Test_BFu9s_BFu31i_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu31i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu31i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, 1, "BFu9s_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu9s_BFu31i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu32ll, BFu9s_BFu31i_BFu32ll)
//============================================================================


struct  BFu9s_BFu31i_BFu33  {
  unsigned short v1:9;
  unsigned int v2:31;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_BFu31i_BFu33) C1{ Fs:9 Fi:31 FL:33}



static void Test_BFu9s_BFu31i_BFu33()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu33");
    static STRUCT_IF_C BFu9s_BFu31i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu31i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, 1, "BFu9s_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu9s_BFu31i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu33, BFu9s_BFu31i_BFu33)
//============================================================================


struct  BFu9s_BFu31i_BFu7c  {
  unsigned short v1:9;
  unsigned int v2:31;
  unsigned char v3:7;
};
//SIG(1 BFu9s_BFu31i_BFu7c) C1{ Fs:9 Fi:31 Fc:7}



static void Test_BFu9s_BFu31i_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu7c");
    static STRUCT_IF_C BFu9s_BFu31i_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu31i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu9s_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu31i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu7c, BFu9s_BFu31i_BFu7c)
//============================================================================


struct  BFu9s_BFu31i_BFu7i  {
  unsigned short v1:9;
  unsigned int v2:31;
  unsigned int v3:7;
};
//SIG(1 BFu9s_BFu31i_BFu7i) C1{ Fs:9 Fi:31 Fi:7}



static void Test_BFu9s_BFu31i_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu7i");
    static STRUCT_IF_C BFu9s_BFu31i_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu31i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu9s_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu31i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu7i, BFu9s_BFu31i_BFu7i)
//============================================================================


struct  BFu9s_BFu31i_BFu7ll  {
  unsigned short v1:9;
  unsigned int v2:31;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_BFu31i_BFu7ll) C1{ Fs:9 Fi:31 FL:7}



static void Test_BFu9s_BFu31i_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu31i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu31i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, 1, "BFu9s_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, hide_ull(1LL<<6), "BFu9s_BFu31i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu7ll, BFu9s_BFu31i_BFu7ll)
//============================================================================


struct  BFu9s_BFu31i_BFu7s  {
  unsigned short v1:9;
  unsigned int v2:31;
  unsigned short v3:7;
};
//SIG(1 BFu9s_BFu31i_BFu7s) C1{ Fs:9 Fi:31 Fs:7}



static void Test_BFu9s_BFu31i_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu7s");
    static STRUCT_IF_C BFu9s_BFu31i_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu31i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu9s_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu31i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu7s, BFu9s_BFu31i_BFu7s)
//============================================================================


struct  BFu9s_BFu31i_BFu8c  {
  unsigned short v1:9;
  unsigned int v2:31;
  unsigned char v3:8;
};
//SIG(1 BFu9s_BFu31i_BFu8c) C1{ Fs:9 Fi:31 Fc:8}



static void Test_BFu9s_BFu31i_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu8c");
    static STRUCT_IF_C BFu9s_BFu31i_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu31i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu9s_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu31i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu8c, BFu9s_BFu31i_BFu8c)
//============================================================================


struct  BFu9s_BFu31i_BFu8i  {
  unsigned short v1:9;
  unsigned int v2:31;
  unsigned int v3:8;
};
//SIG(1 BFu9s_BFu31i_BFu8i) C1{ Fs:9 Fi:31 Fi:8}



static void Test_BFu9s_BFu31i_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu8i");
    static STRUCT_IF_C BFu9s_BFu31i_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu31i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu9s_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu31i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu8i, BFu9s_BFu31i_BFu8i)
//============================================================================


struct  BFu9s_BFu31i_BFu8ll  {
  unsigned short v1:9;
  unsigned int v2:31;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_BFu31i_BFu8ll) C1{ Fs:9 Fi:31 FL:8}



static void Test_BFu9s_BFu31i_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu31i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu31i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, 1, "BFu9s_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, hide_ull(1LL<<7), "BFu9s_BFu31i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu8ll, BFu9s_BFu31i_BFu8ll)
//============================================================================


struct  BFu9s_BFu31i_BFu8s  {
  unsigned short v1:9;
  unsigned int v2:31;
  unsigned short v3:8;
};
//SIG(1 BFu9s_BFu31i_BFu8s) C1{ Fs:9 Fi:31 Fs:8}



static void Test_BFu9s_BFu31i_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu8s");
    static STRUCT_IF_C BFu9s_BFu31i_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu31i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu9s_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu31i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu8s, BFu9s_BFu31i_BFu8s)
//============================================================================


struct  BFu9s_BFu31i_BFu9i  {
  unsigned short v1:9;
  unsigned int v2:31;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFu31i_BFu9i) C1{ Fs:9 Fi:31 Fi:9}



static void Test_BFu9s_BFu31i_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu9i");
    static STRUCT_IF_C BFu9s_BFu31i_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu31i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu9s_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu9i, BFu9s_BFu31i_BFu9i)
//============================================================================


struct  BFu9s_BFu31i_BFu9ll  {
  unsigned short v1:9;
  unsigned int v2:31;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFu31i_BFu9ll) C1{ Fs:9 Fi:31 FL:9}



static void Test_BFu9s_BFu31i_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu31i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu31i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, 1, "BFu9s_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu9ll, BFu9s_BFu31i_BFu9ll)
//============================================================================


struct  BFu9s_BFu31i_BFu9s  {
  unsigned short v1:9;
  unsigned int v2:31;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFu31i_BFu9s) C1{ Fs:9 Fi:31 Fs:9}



static void Test_BFu9s_BFu31i_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu9s");
    static STRUCT_IF_C BFu9s_BFu31i_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu31i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu9s_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu9s, BFu9s_BFu31i_BFu9s)
//============================================================================


struct  BFu9s_BFu31i_C  {
  unsigned short v1:9;
  unsigned int v2:31;
  char v3;
};
//SIG(1 BFu9s_BFu31i_C) C1{ Fs:9 Fi:31 Fc}



static void Test_BFu9s_BFu31i_C()
{
  {
    init_simple_test("BFu9s_BFu31i_C");
    static STRUCT_IF_C BFu9s_BFu31i_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu31i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_C");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_C");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_C");
    check_field_offset(lv, v3, 8, "BFu9s_BFu31i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_C, BFu9s_BFu31i_C)
//============================================================================


struct  BFu9s_BFu31i_D  {
  unsigned short v1:9;
  unsigned int v2:31;
  double v3;
};
//SIG(1 BFu9s_BFu31i_D) C1{ Fs:9 Fi:31 FL}



static void Test_BFu9s_BFu31i_D()
{
  {
    init_simple_test("BFu9s_BFu31i_D");
    static STRUCT_IF_C BFu9s_BFu31i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu9s_BFu31i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31i_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_D");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_D");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_D");
    check_field_offset(lv, v3, 8, "BFu9s_BFu31i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_D, BFu9s_BFu31i_D)
//============================================================================


struct  BFu9s_BFu31i_F  {
  unsigned short v1:9;
  unsigned int v2:31;
  float v3;
};
//SIG(1 BFu9s_BFu31i_F) C1{ Fs:9 Fi:31 Fi}



static void Test_BFu9s_BFu31i_F()
{
  {
    init_simple_test("BFu9s_BFu31i_F");
    static STRUCT_IF_C BFu9s_BFu31i_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu31i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_F");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_F");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_F");
    check_field_offset(lv, v3, 8, "BFu9s_BFu31i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_F, BFu9s_BFu31i_F)
//============================================================================


struct  BFu9s_BFu31i_I  {
  unsigned short v1:9;
  unsigned int v2:31;
  int v3;
};
//SIG(1 BFu9s_BFu31i_I) C1{ Fs:9 Fi:31 Fi}



static void Test_BFu9s_BFu31i_I()
{
  {
    init_simple_test("BFu9s_BFu31i_I");
    static STRUCT_IF_C BFu9s_BFu31i_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu31i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_I");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_I");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_I");
    check_field_offset(lv, v3, 8, "BFu9s_BFu31i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_I, BFu9s_BFu31i_I)
//============================================================================


struct  BFu9s_BFu31i_Ip  {
  unsigned short v1:9;
  unsigned int v2:31;
  int *v3;
};
//SIG(1 BFu9s_BFu31i_Ip) C1{ Fs:9 Fi:31 Fp}



static void Test_BFu9s_BFu31i_Ip()
{
  {
    init_simple_test("BFu9s_BFu31i_Ip");
    static STRUCT_IF_C BFu9s_BFu31i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu31i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_Ip");
    check_field_offset(lv, v3, 8, "BFu9s_BFu31i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_Ip, BFu9s_BFu31i_Ip)
//============================================================================


struct  BFu9s_BFu31i_L  {
  unsigned short v1:9;
  unsigned int v2:31;
  __tsi64 v3;
};
//SIG(1 BFu9s_BFu31i_L) C1{ Fs:9 Fi:31 FL}



static void Test_BFu9s_BFu31i_L()
{
  {
    init_simple_test("BFu9s_BFu31i_L");
    static STRUCT_IF_C BFu9s_BFu31i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu9s_BFu31i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31i_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_L");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_L");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_L");
    check_field_offset(lv, v3, 8, "BFu9s_BFu31i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_L, BFu9s_BFu31i_L)
//============================================================================


struct  BFu9s_BFu31i_S  {
  unsigned short v1:9;
  unsigned int v2:31;
  short v3;
};
//SIG(1 BFu9s_BFu31i_S) C1{ Fs:9 Fi:31 Fs}



static void Test_BFu9s_BFu31i_S()
{
  {
    init_simple_test("BFu9s_BFu31i_S");
    static STRUCT_IF_C BFu9s_BFu31i_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu31i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_S");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_S");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_S");
    check_field_offset(lv, v3, 8, "BFu9s_BFu31i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_S, BFu9s_BFu31i_S)
//============================================================================


struct  BFu9s_BFu31i_Uc  {
  unsigned short v1:9;
  unsigned int v2:31;
  unsigned char v3;
};
//SIG(1 BFu9s_BFu31i_Uc) C1{ Fs:9 Fi:31 Fc}



static void Test_BFu9s_BFu31i_Uc()
{
  {
    init_simple_test("BFu9s_BFu31i_Uc");
    static STRUCT_IF_C BFu9s_BFu31i_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu31i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_Uc");
    check_field_offset(lv, v3, 8, "BFu9s_BFu31i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_Uc, BFu9s_BFu31i_Uc)
//============================================================================


struct  BFu9s_BFu31i_Ui  {
  unsigned short v1:9;
  unsigned int v2:31;
  unsigned int v3;
};
//SIG(1 BFu9s_BFu31i_Ui) C1{ Fs:9 Fi:31 Fi}



static void Test_BFu9s_BFu31i_Ui()
{
  {
    init_simple_test("BFu9s_BFu31i_Ui");
    static STRUCT_IF_C BFu9s_BFu31i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu31i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_Ui");
    check_field_offset(lv, v3, 8, "BFu9s_BFu31i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_Ui, BFu9s_BFu31i_Ui)
//============================================================================


struct  BFu9s_BFu31i_Ul  {
  unsigned short v1:9;
  unsigned int v2:31;
  __tsu64 v3;
};
//SIG(1 BFu9s_BFu31i_Ul) C1{ Fs:9 Fi:31 FL}



static void Test_BFu9s_BFu31i_Ul()
{
  {
    init_simple_test("BFu9s_BFu31i_Ul");
    static STRUCT_IF_C BFu9s_BFu31i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu9s_BFu31i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_Ul");
    check_field_offset(lv, v3, 8, "BFu9s_BFu31i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_Ul, BFu9s_BFu31i_Ul)
//============================================================================


struct  BFu9s_BFu31i_Us  {
  unsigned short v1:9;
  unsigned int v2:31;
  unsigned short v3;
};
//SIG(1 BFu9s_BFu31i_Us) C1{ Fs:9 Fi:31 Fs}



static void Test_BFu9s_BFu31i_Us()
{
  {
    init_simple_test("BFu9s_BFu31i_Us");
    static STRUCT_IF_C BFu9s_BFu31i_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu31i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_Us");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_Us");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_Us");
    check_field_offset(lv, v3, 8, "BFu9s_BFu31i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_Us, BFu9s_BFu31i_Us)
//============================================================================


struct  BFu9s_BFu31i_Vp  {
  unsigned short v1:9;
  unsigned int v2:31;
  void *v3;
};
//SIG(1 BFu9s_BFu31i_Vp) C1{ Fs:9 Fi:31 Fp}



static void Test_BFu9s_BFu31i_Vp()
{
  {
    init_simple_test("BFu9s_BFu31i_Vp");
    static STRUCT_IF_C BFu9s_BFu31i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu31i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_Vp");
    check_field_offset(lv, v3, 8, "BFu9s_BFu31i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_Vp, BFu9s_BFu31i_Vp)
//============================================================================


struct  BFu9s_BFu31ll  {
  unsigned short v1:9;
  __tsu64 v2:31;
};
//SIG(1 BFu9s_BFu31ll) C1{ Fs:9 FL:31}



static void Test_BFu9s_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll, BFu9s_BFu31ll)
//============================================================================


struct  BFu9s_BFu31ll_BFu15i  {
  unsigned short v1:9;
  __tsu64 v2:31;
  unsigned int v3:15;
};
//SIG(1 BFu9s_BFu31ll_BFu15i) C1{ Fs:9 FL:31 Fi:15}



static void Test_BFu9s_BFu31ll_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu15i");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu9s_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu31ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu15i, BFu9s_BFu31ll_BFu15i)
//============================================================================


struct  BFu9s_BFu31ll_BFu15ll  {
  unsigned short v1:9;
  __tsu64 v2:31;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_BFu31ll_BFu15ll) C1{ Fs:9 FL:31 FL:15}



static void Test_BFu9s_BFu31ll_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu9s_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu31ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu15ll, BFu9s_BFu31ll_BFu15ll)
//============================================================================


struct  BFu9s_BFu31ll_BFu15s  {
  unsigned short v1:9;
  __tsu64 v2:31;
  unsigned short v3:15;
};
//SIG(1 BFu9s_BFu31ll_BFu15s) C1{ Fs:9 FL:31 Fs:15}



static void Test_BFu9s_BFu31ll_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu15s");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu9s_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu31ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu15s, BFu9s_BFu31ll_BFu15s)
//============================================================================


struct  BFu9s_BFu31ll_BFu16i  {
  unsigned short v1:9;
  __tsu64 v2:31;
  unsigned int v3:16;
};
//SIG(1 BFu9s_BFu31ll_BFu16i) C1{ Fs:9 FL:31 Fi:16}



static void Test_BFu9s_BFu31ll_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu16i");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu9s_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu31ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu16i, BFu9s_BFu31ll_BFu16i)
//============================================================================


struct  BFu9s_BFu31ll_BFu16ll  {
  unsigned short v1:9;
  __tsu64 v2:31;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_BFu31ll_BFu16ll) C1{ Fs:9 FL:31 FL:16}



static void Test_BFu9s_BFu31ll_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu9s_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu31ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu16ll, BFu9s_BFu31ll_BFu16ll)
//============================================================================


struct  BFu9s_BFu31ll_BFu16s  {
  unsigned short v1:9;
  __tsu64 v2:31;
  unsigned short v3:16;
};
//SIG(1 BFu9s_BFu31ll_BFu16s) C1{ Fs:9 FL:31 Fs:16}



static void Test_BFu9s_BFu31ll_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu16s");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu9s_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu31ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu16s, BFu9s_BFu31ll_BFu16s)
//============================================================================


struct  BFu9s_BFu31ll_BFu17i  {
  unsigned short v1:9;
  __tsu64 v2:31;
  unsigned int v3:17;
};
//SIG(1 BFu9s_BFu31ll_BFu17i) C1{ Fs:9 FL:31 Fi:17}



static void Test_BFu9s_BFu31ll_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu17i");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu9s_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu31ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu17i, BFu9s_BFu31ll_BFu17i)
//============================================================================


struct  BFu9s_BFu31ll_BFu17ll  {
  unsigned short v1:9;
  __tsu64 v2:31;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_BFu31ll_BFu17ll) C1{ Fs:9 FL:31 FL:17}



static void Test_BFu9s_BFu31ll_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu9s_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu31ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu17ll, BFu9s_BFu31ll_BFu17ll)
//============================================================================


struct  BFu9s_BFu31ll_BFu1c  {
  unsigned short v1:9;
  __tsu64 v2:31;
  unsigned char v3:1;
};
//SIG(1 BFu9s_BFu31ll_BFu1c) C1{ Fs:9 FL:31 Fc:1}



static void Test_BFu9s_BFu31ll_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu1c");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu1c");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu9s_BFu31ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu1c, BFu9s_BFu31ll_BFu1c)
//============================================================================


struct  BFu9s_BFu31ll_BFu1i  {
  unsigned short v1:9;
  __tsu64 v2:31;
  unsigned int v3:1;
};
//SIG(1 BFu9s_BFu31ll_BFu1i) C1{ Fs:9 FL:31 Fi:1}



static void Test_BFu9s_BFu31ll_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu1i");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu1i");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu9s_BFu31ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu1i, BFu9s_BFu31ll_BFu1i)
//============================================================================


struct  BFu9s_BFu31ll_BFu1ll  {
  unsigned short v1:9;
  __tsu64 v2:31;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_BFu31ll_BFu1ll) C1{ Fs:9 FL:31 FL:1}



static void Test_BFu9s_BFu31ll_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu9s_BFu31ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu1ll, BFu9s_BFu31ll_BFu1ll)
//============================================================================


struct  BFu9s_BFu31ll_BFu1s  {
  unsigned short v1:9;
  __tsu64 v2:31;
  unsigned short v3:1;
};
//SIG(1 BFu9s_BFu31ll_BFu1s) C1{ Fs:9 FL:31 Fs:1}



static void Test_BFu9s_BFu31ll_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu1s");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu1s");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu9s_BFu31ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu1s, BFu9s_BFu31ll_BFu1s)
//============================================================================


struct  BFu9s_BFu31ll_BFu31i  {
  unsigned short v1:9;
  __tsu64 v2:31;
  unsigned int v3:31;
};
//SIG(1 BFu9s_BFu31ll_BFu31i) C1{ Fs:9 FL:31 Fi:31}



static void Test_BFu9s_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu31i");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu9s_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu31i, BFu9s_BFu31ll_BFu31i)
//============================================================================


struct  BFu9s_BFu31ll_BFu31ll  {
  unsigned short v1:9;
  __tsu64 v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_BFu31ll_BFu31ll) C1{ Fs:9 FL:31 FL:31}



static void Test_BFu9s_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, 1, "BFu9s_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu31ll, BFu9s_BFu31ll_BFu31ll)
//============================================================================


struct  BFu9s_BFu31ll_BFu32i  {
  unsigned short v1:9;
  __tsu64 v2:31;
  unsigned int v3:32;
};
//SIG(1 BFu9s_BFu31ll_BFu32i) C1{ Fs:9 FL:31 Fi:32}



static void Test_BFu9s_BFu31ll_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu32i");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu31ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu9s_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu31ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu32i, BFu9s_BFu31ll_BFu32i)
//============================================================================


struct  BFu9s_BFu31ll_BFu32ll  {
  unsigned short v1:9;
  __tsu64 v2:31;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_BFu31ll_BFu32ll) C1{ Fs:9 FL:31 FL:32}



static void Test_BFu9s_BFu31ll_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu31ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, 1, "BFu9s_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, hide_ull(1LL<<31), "BFu9s_BFu31ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu32ll, BFu9s_BFu31ll_BFu32ll)
//============================================================================


struct  BFu9s_BFu31ll_BFu33  {
  unsigned short v1:9;
  __tsu64 v2:31;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_BFu31ll_BFu33) C1{ Fs:9 FL:31 FL:33}



static void Test_BFu9s_BFu31ll_BFu33()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu33");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu31ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, 1, "BFu9s_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, hide_ull(1LL<<32), "BFu9s_BFu31ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu33, BFu9s_BFu31ll_BFu33)
//============================================================================


struct  BFu9s_BFu31ll_BFu7c  {
  unsigned short v1:9;
  __tsu64 v2:31;
  unsigned char v3:7;
};
//SIG(1 BFu9s_BFu31ll_BFu7c) C1{ Fs:9 FL:31 Fc:7}



static void Test_BFu9s_BFu31ll_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu7c");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu9s_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu31ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu7c, BFu9s_BFu31ll_BFu7c)
//============================================================================


struct  BFu9s_BFu31ll_BFu7i  {
  unsigned short v1:9;
  __tsu64 v2:31;
  unsigned int v3:7;
};
//SIG(1 BFu9s_BFu31ll_BFu7i) C1{ Fs:9 FL:31 Fi:7}



static void Test_BFu9s_BFu31ll_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu7i");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu9s_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu31ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu7i, BFu9s_BFu31ll_BFu7i)
//============================================================================


struct  BFu9s_BFu31ll_BFu7ll  {
  unsigned short v1:9;
  __tsu64 v2:31;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_BFu31ll_BFu7ll) C1{ Fs:9 FL:31 FL:7}



static void Test_BFu9s_BFu31ll_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu9s_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu31ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu7ll, BFu9s_BFu31ll_BFu7ll)
//============================================================================


struct  BFu9s_BFu31ll_BFu7s  {
  unsigned short v1:9;
  __tsu64 v2:31;
  unsigned short v3:7;
};
//SIG(1 BFu9s_BFu31ll_BFu7s) C1{ Fs:9 FL:31 Fs:7}



static void Test_BFu9s_BFu31ll_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu7s");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu9s_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu31ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu7s, BFu9s_BFu31ll_BFu7s)
//============================================================================


struct  BFu9s_BFu31ll_BFu8c  {
  unsigned short v1:9;
  __tsu64 v2:31;
  unsigned char v3:8;
};
//SIG(1 BFu9s_BFu31ll_BFu8c) C1{ Fs:9 FL:31 Fc:8}



static void Test_BFu9s_BFu31ll_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu8c");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu9s_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu31ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu8c, BFu9s_BFu31ll_BFu8c)
//============================================================================


struct  BFu9s_BFu31ll_BFu8i  {
  unsigned short v1:9;
  __tsu64 v2:31;
  unsigned int v3:8;
};
//SIG(1 BFu9s_BFu31ll_BFu8i) C1{ Fs:9 FL:31 Fi:8}



static void Test_BFu9s_BFu31ll_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu8i");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu9s_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu31ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu8i, BFu9s_BFu31ll_BFu8i)
//============================================================================


struct  BFu9s_BFu31ll_BFu8ll  {
  unsigned short v1:9;
  __tsu64 v2:31;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_BFu31ll_BFu8ll) C1{ Fs:9 FL:31 FL:8}



static void Test_BFu9s_BFu31ll_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu9s_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu31ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu8ll, BFu9s_BFu31ll_BFu8ll)
//============================================================================


struct  BFu9s_BFu31ll_BFu8s  {
  unsigned short v1:9;
  __tsu64 v2:31;
  unsigned short v3:8;
};
//SIG(1 BFu9s_BFu31ll_BFu8s) C1{ Fs:9 FL:31 Fs:8}



static void Test_BFu9s_BFu31ll_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu8s");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu9s_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu31ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu8s, BFu9s_BFu31ll_BFu8s)
//============================================================================


struct  BFu9s_BFu31ll_BFu9i  {
  unsigned short v1:9;
  __tsu64 v2:31;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFu31ll_BFu9i) C1{ Fs:9 FL:31 Fi:9}



static void Test_BFu9s_BFu31ll_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu9i");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu9s_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu9i, BFu9s_BFu31ll_BFu9i)
//============================================================================


struct  BFu9s_BFu31ll_BFu9ll  {
  unsigned short v1:9;
  __tsu64 v2:31;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFu31ll_BFu9ll) C1{ Fs:9 FL:31 FL:9}



static void Test_BFu9s_BFu31ll_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu9s_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu9ll, BFu9s_BFu31ll_BFu9ll)
//============================================================================


struct  BFu9s_BFu31ll_BFu9s  {
  unsigned short v1:9;
  __tsu64 v2:31;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFu31ll_BFu9s) C1{ Fs:9 FL:31 Fs:9}



static void Test_BFu9s_BFu31ll_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu9s");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu9s_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu9s, BFu9s_BFu31ll_BFu9s)
//============================================================================


struct  BFu9s_BFu31ll_C  {
  unsigned short v1:9;
  __tsu64 v2:31;
  char v3;
};
//SIG(1 BFu9s_BFu31ll_C) C1{ Fs:9 FL:31 Fc}



static void Test_BFu9s_BFu31ll_C()
{
  {
    init_simple_test("BFu9s_BFu31ll_C");
    static STRUCT_IF_C BFu9s_BFu31ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_C");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_C");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_C");
    check_field_offset(lv, v3, 5, "BFu9s_BFu31ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_C, BFu9s_BFu31ll_C)
//============================================================================


struct  BFu9s_BFu31ll_D  {
  unsigned short v1:9;
  __tsu64 v2:31;
  double v3;
};
//SIG(1 BFu9s_BFu31ll_D) C1{ Fs:9 FL:31 FL}



static void Test_BFu9s_BFu31ll_D()
{
  {
    init_simple_test("BFu9s_BFu31ll_D");
    static STRUCT_IF_C BFu9s_BFu31ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu9s_BFu31ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_D");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_D");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_D");
    check_field_offset(lv, v3, 8, "BFu9s_BFu31ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_D, BFu9s_BFu31ll_D)
//============================================================================


struct  BFu9s_BFu31ll_F  {
  unsigned short v1:9;
  __tsu64 v2:31;
  float v3;
};
//SIG(1 BFu9s_BFu31ll_F) C1{ Fs:9 FL:31 Fi}



static void Test_BFu9s_BFu31ll_F()
{
  {
    init_simple_test("BFu9s_BFu31ll_F");
    static STRUCT_IF_C BFu9s_BFu31ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu31ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_F");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_F");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_F");
    check_field_offset(lv, v3, 8, "BFu9s_BFu31ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_F, BFu9s_BFu31ll_F)
//============================================================================


struct  BFu9s_BFu31ll_I  {
  unsigned short v1:9;
  __tsu64 v2:31;
  int v3;
};
//SIG(1 BFu9s_BFu31ll_I) C1{ Fs:9 FL:31 Fi}



static void Test_BFu9s_BFu31ll_I()
{
  {
    init_simple_test("BFu9s_BFu31ll_I");
    static STRUCT_IF_C BFu9s_BFu31ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu31ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_I");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_I");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_I");
    check_field_offset(lv, v3, 8, "BFu9s_BFu31ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_I, BFu9s_BFu31ll_I)
//============================================================================


struct  BFu9s_BFu31ll_Ip  {
  unsigned short v1:9;
  __tsu64 v2:31;
  int *v3;
};
//SIG(1 BFu9s_BFu31ll_Ip) C1{ Fs:9 FL:31 Fp}



static void Test_BFu9s_BFu31ll_Ip()
{
  {
    init_simple_test("BFu9s_BFu31ll_Ip");
    static STRUCT_IF_C BFu9s_BFu31ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu31ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_Ip");
    check_field_offset(lv, v3, 8, "BFu9s_BFu31ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_Ip, BFu9s_BFu31ll_Ip)
//============================================================================


struct  BFu9s_BFu31ll_L  {
  unsigned short v1:9;
  __tsu64 v2:31;
  __tsi64 v3;
};
//SIG(1 BFu9s_BFu31ll_L) C1{ Fs:9 FL:31 FL}



static void Test_BFu9s_BFu31ll_L()
{
  {
    init_simple_test("BFu9s_BFu31ll_L");
    static STRUCT_IF_C BFu9s_BFu31ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu9s_BFu31ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_L");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_L");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_L");
    check_field_offset(lv, v3, 8, "BFu9s_BFu31ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_L, BFu9s_BFu31ll_L)
//============================================================================


struct  BFu9s_BFu31ll_S  {
  unsigned short v1:9;
  __tsu64 v2:31;
  short v3;
};
//SIG(1 BFu9s_BFu31ll_S) C1{ Fs:9 FL:31 Fs}



static void Test_BFu9s_BFu31ll_S()
{
  {
    init_simple_test("BFu9s_BFu31ll_S");
    static STRUCT_IF_C BFu9s_BFu31ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_S");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_S");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_S");
    check_field_offset(lv, v3, 6, "BFu9s_BFu31ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_S, BFu9s_BFu31ll_S)
//============================================================================


struct  BFu9s_BFu31ll_Uc  {
  unsigned short v1:9;
  __tsu64 v2:31;
  unsigned char v3;
};
//SIG(1 BFu9s_BFu31ll_Uc) C1{ Fs:9 FL:31 Fc}



static void Test_BFu9s_BFu31ll_Uc()
{
  {
    init_simple_test("BFu9s_BFu31ll_Uc");
    static STRUCT_IF_C BFu9s_BFu31ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_Uc");
    check_field_offset(lv, v3, 5, "BFu9s_BFu31ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_Uc, BFu9s_BFu31ll_Uc)
//============================================================================


struct  BFu9s_BFu31ll_Ui  {
  unsigned short v1:9;
  __tsu64 v2:31;
  unsigned int v3;
};
//SIG(1 BFu9s_BFu31ll_Ui) C1{ Fs:9 FL:31 Fi}



static void Test_BFu9s_BFu31ll_Ui()
{
  {
    init_simple_test("BFu9s_BFu31ll_Ui");
    static STRUCT_IF_C BFu9s_BFu31ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu31ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_Ui");
    check_field_offset(lv, v3, 8, "BFu9s_BFu31ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_Ui, BFu9s_BFu31ll_Ui)
//============================================================================


struct  BFu9s_BFu31ll_Ul  {
  unsigned short v1:9;
  __tsu64 v2:31;
  __tsu64 v3;
};
//SIG(1 BFu9s_BFu31ll_Ul) C1{ Fs:9 FL:31 FL}



static void Test_BFu9s_BFu31ll_Ul()
{
  {
    init_simple_test("BFu9s_BFu31ll_Ul");
    static STRUCT_IF_C BFu9s_BFu31ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu9s_BFu31ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_Ul");
    check_field_offset(lv, v3, 8, "BFu9s_BFu31ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_Ul, BFu9s_BFu31ll_Ul)
//============================================================================


struct  BFu9s_BFu31ll_Us  {
  unsigned short v1:9;
  __tsu64 v2:31;
  unsigned short v3;
};
//SIG(1 BFu9s_BFu31ll_Us) C1{ Fs:9 FL:31 Fs}



static void Test_BFu9s_BFu31ll_Us()
{
  {
    init_simple_test("BFu9s_BFu31ll_Us");
    static STRUCT_IF_C BFu9s_BFu31ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_Us");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_Us");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_Us");
    check_field_offset(lv, v3, 6, "BFu9s_BFu31ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_Us, BFu9s_BFu31ll_Us)
//============================================================================


struct  BFu9s_BFu31ll_Vp  {
  unsigned short v1:9;
  __tsu64 v2:31;
  void *v3;
};
//SIG(1 BFu9s_BFu31ll_Vp) C1{ Fs:9 FL:31 Fp}



static void Test_BFu9s_BFu31ll_Vp()
{
  {
    init_simple_test("BFu9s_BFu31ll_Vp");
    static STRUCT_IF_C BFu9s_BFu31ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu31ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_Vp");
    check_field_offset(lv, v3, 8, "BFu9s_BFu31ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_Vp, BFu9s_BFu31ll_Vp)
//============================================================================


struct  BFu9s_BFu32i  {
  unsigned short v1:9;
  unsigned int v2:32;
};
//SIG(1 BFu9s_BFu32i) C1{ Fs:9 Fi:32}



static void Test_BFu9s_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu32i");
    static STRUCT_IF_C BFu9s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i, BFu9s_BFu32i)
//============================================================================


struct  BFu9s_BFu32i_BFu15i  {
  unsigned short v1:9;
  unsigned int v2:32;
  unsigned int v3:15;
};
//SIG(1 BFu9s_BFu32i_BFu15i) C1{ Fs:9 Fi:32 Fi:15}



static void Test_BFu9s_BFu32i_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu15i");
    static STRUCT_IF_C BFu9s_BFu32i_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu32i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu9s_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu32i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu15i, BFu9s_BFu32i_BFu15i)
//============================================================================


struct  BFu9s_BFu32i_BFu15ll  {
  unsigned short v1:9;
  unsigned int v2:32;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_BFu32i_BFu15ll) C1{ Fs:9 Fi:32 FL:15}



static void Test_BFu9s_BFu32i_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu32i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu32i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu9s_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu32i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu15ll, BFu9s_BFu32i_BFu15ll)
//============================================================================


struct  BFu9s_BFu32i_BFu15s  {
  unsigned short v1:9;
  unsigned int v2:32;
  unsigned short v3:15;
};
//SIG(1 BFu9s_BFu32i_BFu15s) C1{ Fs:9 Fi:32 Fs:15}



static void Test_BFu9s_BFu32i_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu15s");
    static STRUCT_IF_C BFu9s_BFu32i_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu32i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu9s_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu32i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu15s, BFu9s_BFu32i_BFu15s)
//============================================================================


struct  BFu9s_BFu32i_BFu16i  {
  unsigned short v1:9;
  unsigned int v2:32;
  unsigned int v3:16;
};
//SIG(1 BFu9s_BFu32i_BFu16i) C1{ Fs:9 Fi:32 Fi:16}



static void Test_BFu9s_BFu32i_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu16i");
    static STRUCT_IF_C BFu9s_BFu32i_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu32i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu9s_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu32i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu16i, BFu9s_BFu32i_BFu16i)
//============================================================================


struct  BFu9s_BFu32i_BFu16ll  {
  unsigned short v1:9;
  unsigned int v2:32;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_BFu32i_BFu16ll) C1{ Fs:9 Fi:32 FL:16}



static void Test_BFu9s_BFu32i_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu32i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu32i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu9s_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu32i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu16ll, BFu9s_BFu32i_BFu16ll)
//============================================================================


struct  BFu9s_BFu32i_BFu16s  {
  unsigned short v1:9;
  unsigned int v2:32;
  unsigned short v3:16;
};
//SIG(1 BFu9s_BFu32i_BFu16s) C1{ Fs:9 Fi:32 Fs:16}



static void Test_BFu9s_BFu32i_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu16s");
    static STRUCT_IF_C BFu9s_BFu32i_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu32i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu9s_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu32i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu16s, BFu9s_BFu32i_BFu16s)
//============================================================================


struct  BFu9s_BFu32i_BFu17i  {
  unsigned short v1:9;
  unsigned int v2:32;
  unsigned int v3:17;
};
//SIG(1 BFu9s_BFu32i_BFu17i) C1{ Fs:9 Fi:32 Fi:17}



static void Test_BFu9s_BFu32i_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu17i");
    static STRUCT_IF_C BFu9s_BFu32i_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu32i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu9s_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu32i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu17i, BFu9s_BFu32i_BFu17i)
//============================================================================


struct  BFu9s_BFu32i_BFu17ll  {
  unsigned short v1:9;
  unsigned int v2:32;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_BFu32i_BFu17ll) C1{ Fs:9 Fi:32 FL:17}



static void Test_BFu9s_BFu32i_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu32i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu32i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu9s_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu32i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu17ll, BFu9s_BFu32i_BFu17ll)
//============================================================================


struct  BFu9s_BFu32i_BFu1c  {
  unsigned short v1:9;
  unsigned int v2:32;
  unsigned char v3:1;
};
//SIG(1 BFu9s_BFu32i_BFu1c) C1{ Fs:9 Fi:32 Fc:1}



static void Test_BFu9s_BFu32i_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu1c");
    static STRUCT_IF_C BFu9s_BFu32i_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu32i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu1c");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu9s_BFu32i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu1c, BFu9s_BFu32i_BFu1c)
//============================================================================


struct  BFu9s_BFu32i_BFu1i  {
  unsigned short v1:9;
  unsigned int v2:32;
  unsigned int v3:1;
};
//SIG(1 BFu9s_BFu32i_BFu1i) C1{ Fs:9 Fi:32 Fi:1}



static void Test_BFu9s_BFu32i_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu1i");
    static STRUCT_IF_C BFu9s_BFu32i_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu32i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu1i");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu9s_BFu32i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu1i, BFu9s_BFu32i_BFu1i)
//============================================================================


struct  BFu9s_BFu32i_BFu1ll  {
  unsigned short v1:9;
  unsigned int v2:32;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_BFu32i_BFu1ll) C1{ Fs:9 Fi:32 FL:1}



static void Test_BFu9s_BFu32i_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu32i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu32i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu1ll");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu9s_BFu32i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu1ll, BFu9s_BFu32i_BFu1ll)
//============================================================================


struct  BFu9s_BFu32i_BFu1s  {
  unsigned short v1:9;
  unsigned int v2:32;
  unsigned short v3:1;
};
//SIG(1 BFu9s_BFu32i_BFu1s) C1{ Fs:9 Fi:32 Fs:1}



static void Test_BFu9s_BFu32i_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu1s");
    static STRUCT_IF_C BFu9s_BFu32i_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu32i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu1s");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu9s_BFu32i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu1s, BFu9s_BFu32i_BFu1s)
//============================================================================


struct  BFu9s_BFu32i_BFu31i  {
  unsigned short v1:9;
  unsigned int v2:32;
  unsigned int v3:31;
};
//SIG(1 BFu9s_BFu32i_BFu31i) C1{ Fs:9 Fi:32 Fi:31}



static void Test_BFu9s_BFu32i_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu31i");
    static STRUCT_IF_C BFu9s_BFu32i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu32i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu9s_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu32i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu31i, BFu9s_BFu32i_BFu31i)
//============================================================================


struct  BFu9s_BFu32i_BFu31ll  {
  unsigned short v1:9;
  unsigned int v2:32;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_BFu32i_BFu31ll) C1{ Fs:9 Fi:32 FL:31}



static void Test_BFu9s_BFu32i_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu32i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu32i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu9s_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu32i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu31ll, BFu9s_BFu32i_BFu31ll)
//============================================================================


struct  BFu9s_BFu32i_BFu32i  {
  unsigned short v1:9;
  unsigned int v2:32;
  unsigned int v3:32;
};
//SIG(1 BFu9s_BFu32i_BFu32i) C1{ Fs:9 Fi:32 Fi:32}



static void Test_BFu9s_BFu32i_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu32i");
    static STRUCT_IF_C BFu9s_BFu32i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu32i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu9s_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu32i, BFu9s_BFu32i_BFu32i)
//============================================================================


struct  BFu9s_BFu32i_BFu32ll  {
  unsigned short v1:9;
  unsigned int v2:32;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_BFu32i_BFu32ll) C1{ Fs:9 Fi:32 FL:32}



static void Test_BFu9s_BFu32i_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu32i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu9s_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu32ll, BFu9s_BFu32i_BFu32ll)
//============================================================================


struct  BFu9s_BFu32i_BFu33  {
  unsigned short v1:9;
  unsigned int v2:32;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_BFu32i_BFu33) C1{ Fs:9 Fi:32 FL:33}



static void Test_BFu9s_BFu32i_BFu33()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu33");
    static STRUCT_IF_C BFu9s_BFu32i_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu9s_BFu32i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu9s_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu9s_BFu32i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu33, BFu9s_BFu32i_BFu33)
//============================================================================


struct  BFu9s_BFu32i_BFu7c  {
  unsigned short v1:9;
  unsigned int v2:32;
  unsigned char v3:7;
};
//SIG(1 BFu9s_BFu32i_BFu7c) C1{ Fs:9 Fi:32 Fc:7}



static void Test_BFu9s_BFu32i_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu7c");
    static STRUCT_IF_C BFu9s_BFu32i_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu32i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu9s_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu32i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu7c, BFu9s_BFu32i_BFu7c)
//============================================================================


struct  BFu9s_BFu32i_BFu7i  {
  unsigned short v1:9;
  unsigned int v2:32;
  unsigned int v3:7;
};
//SIG(1 BFu9s_BFu32i_BFu7i) C1{ Fs:9 Fi:32 Fi:7}



static void Test_BFu9s_BFu32i_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu7i");
    static STRUCT_IF_C BFu9s_BFu32i_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu32i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu9s_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu32i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu7i, BFu9s_BFu32i_BFu7i)
//============================================================================


struct  BFu9s_BFu32i_BFu7ll  {
  unsigned short v1:9;
  unsigned int v2:32;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_BFu32i_BFu7ll) C1{ Fs:9 Fi:32 FL:7}



static void Test_BFu9s_BFu32i_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu32i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu32i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu9s_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu32i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu7ll, BFu9s_BFu32i_BFu7ll)
//============================================================================


struct  BFu9s_BFu32i_BFu7s  {
  unsigned short v1:9;
  unsigned int v2:32;
  unsigned short v3:7;
};
//SIG(1 BFu9s_BFu32i_BFu7s) C1{ Fs:9 Fi:32 Fs:7}



static void Test_BFu9s_BFu32i_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu7s");
    static STRUCT_IF_C BFu9s_BFu32i_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu32i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu9s_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu32i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu7s, BFu9s_BFu32i_BFu7s)
//============================================================================


struct  BFu9s_BFu32i_BFu8c  {
  unsigned short v1:9;
  unsigned int v2:32;
  unsigned char v3:8;
};
//SIG(1 BFu9s_BFu32i_BFu8c) C1{ Fs:9 Fi:32 Fc:8}



static void Test_BFu9s_BFu32i_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu8c");
    static STRUCT_IF_C BFu9s_BFu32i_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu32i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu9s_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu32i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu8c, BFu9s_BFu32i_BFu8c)
//============================================================================


struct  BFu9s_BFu32i_BFu8i  {
  unsigned short v1:9;
  unsigned int v2:32;
  unsigned int v3:8;
};
//SIG(1 BFu9s_BFu32i_BFu8i) C1{ Fs:9 Fi:32 Fi:8}



static void Test_BFu9s_BFu32i_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu8i");
    static STRUCT_IF_C BFu9s_BFu32i_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu32i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu9s_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu32i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu8i, BFu9s_BFu32i_BFu8i)
//============================================================================


struct  BFu9s_BFu32i_BFu8ll  {
  unsigned short v1:9;
  unsigned int v2:32;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_BFu32i_BFu8ll) C1{ Fs:9 Fi:32 FL:8}



static void Test_BFu9s_BFu32i_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu32i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu32i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu9s_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu32i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu8ll, BFu9s_BFu32i_BFu8ll)
//============================================================================


struct  BFu9s_BFu32i_BFu8s  {
  unsigned short v1:9;
  unsigned int v2:32;
  unsigned short v3:8;
};
//SIG(1 BFu9s_BFu32i_BFu8s) C1{ Fs:9 Fi:32 Fs:8}



static void Test_BFu9s_BFu32i_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu8s");
    static STRUCT_IF_C BFu9s_BFu32i_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu32i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu9s_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu32i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu8s, BFu9s_BFu32i_BFu8s)
//============================================================================


struct  BFu9s_BFu32i_BFu9i  {
  unsigned short v1:9;
  unsigned int v2:32;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFu32i_BFu9i) C1{ Fs:9 Fi:32 Fi:9}



static void Test_BFu9s_BFu32i_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu9i");
    static STRUCT_IF_C BFu9s_BFu32i_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu32i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu9s_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu9i, BFu9s_BFu32i_BFu9i)
//============================================================================


struct  BFu9s_BFu32i_BFu9ll  {
  unsigned short v1:9;
  unsigned int v2:32;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFu32i_BFu9ll) C1{ Fs:9 Fi:32 FL:9}



static void Test_BFu9s_BFu32i_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu32i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu32i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu9s_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu9ll, BFu9s_BFu32i_BFu9ll)
//============================================================================


struct  BFu9s_BFu32i_BFu9s  {
  unsigned short v1:9;
  unsigned int v2:32;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFu32i_BFu9s) C1{ Fs:9 Fi:32 Fs:9}



static void Test_BFu9s_BFu32i_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu9s");
    static STRUCT_IF_C BFu9s_BFu32i_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu32i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu9s_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu9s, BFu9s_BFu32i_BFu9s)
//============================================================================


struct  BFu9s_BFu32i_C  {
  unsigned short v1:9;
  unsigned int v2:32;
  char v3;
};
//SIG(1 BFu9s_BFu32i_C) C1{ Fs:9 Fi:32 Fc}



static void Test_BFu9s_BFu32i_C()
{
  {
    init_simple_test("BFu9s_BFu32i_C");
    static STRUCT_IF_C BFu9s_BFu32i_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu32i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_C");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_C");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_C");
    check_field_offset(lv, v3, 8, "BFu9s_BFu32i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_C, BFu9s_BFu32i_C)
//============================================================================


struct  BFu9s_BFu32i_D  {
  unsigned short v1:9;
  unsigned int v2:32;
  double v3;
};
//SIG(1 BFu9s_BFu32i_D) C1{ Fs:9 Fi:32 FL}



static void Test_BFu9s_BFu32i_D()
{
  {
    init_simple_test("BFu9s_BFu32i_D");
    static STRUCT_IF_C BFu9s_BFu32i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu9s_BFu32i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32i_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_D");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_D");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_D");
    check_field_offset(lv, v3, 8, "BFu9s_BFu32i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_D, BFu9s_BFu32i_D)
//============================================================================


struct  BFu9s_BFu32i_F  {
  unsigned short v1:9;
  unsigned int v2:32;
  float v3;
};
//SIG(1 BFu9s_BFu32i_F) C1{ Fs:9 Fi:32 Fi}



static void Test_BFu9s_BFu32i_F()
{
  {
    init_simple_test("BFu9s_BFu32i_F");
    static STRUCT_IF_C BFu9s_BFu32i_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu32i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_F");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_F");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_F");
    check_field_offset(lv, v3, 8, "BFu9s_BFu32i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_F, BFu9s_BFu32i_F)
//============================================================================


struct  BFu9s_BFu32i_I  {
  unsigned short v1:9;
  unsigned int v2:32;
  int v3;
};
//SIG(1 BFu9s_BFu32i_I) C1{ Fs:9 Fi:32 Fi}



static void Test_BFu9s_BFu32i_I()
{
  {
    init_simple_test("BFu9s_BFu32i_I");
    static STRUCT_IF_C BFu9s_BFu32i_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu32i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_I");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_I");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_I");
    check_field_offset(lv, v3, 8, "BFu9s_BFu32i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_I, BFu9s_BFu32i_I)
//============================================================================


struct  BFu9s_BFu32i_Ip  {
  unsigned short v1:9;
  unsigned int v2:32;
  int *v3;
};
//SIG(1 BFu9s_BFu32i_Ip) C1{ Fs:9 Fi:32 Fp}



static void Test_BFu9s_BFu32i_Ip()
{
  {
    init_simple_test("BFu9s_BFu32i_Ip");
    static STRUCT_IF_C BFu9s_BFu32i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu32i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_Ip");
    check_field_offset(lv, v3, 8, "BFu9s_BFu32i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_Ip, BFu9s_BFu32i_Ip)
//============================================================================


struct  BFu9s_BFu32i_L  {
  unsigned short v1:9;
  unsigned int v2:32;
  __tsi64 v3;
};
//SIG(1 BFu9s_BFu32i_L) C1{ Fs:9 Fi:32 FL}



static void Test_BFu9s_BFu32i_L()
{
  {
    init_simple_test("BFu9s_BFu32i_L");
    static STRUCT_IF_C BFu9s_BFu32i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu9s_BFu32i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32i_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_L");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_L");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_L");
    check_field_offset(lv, v3, 8, "BFu9s_BFu32i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_L, BFu9s_BFu32i_L)
//============================================================================


struct  BFu9s_BFu32i_S  {
  unsigned short v1:9;
  unsigned int v2:32;
  short v3;
};
//SIG(1 BFu9s_BFu32i_S) C1{ Fs:9 Fi:32 Fs}



static void Test_BFu9s_BFu32i_S()
{
  {
    init_simple_test("BFu9s_BFu32i_S");
    static STRUCT_IF_C BFu9s_BFu32i_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu32i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_S");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_S");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_S");
    check_field_offset(lv, v3, 8, "BFu9s_BFu32i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_S, BFu9s_BFu32i_S)
//============================================================================


struct  BFu9s_BFu32i_Uc  {
  unsigned short v1:9;
  unsigned int v2:32;
  unsigned char v3;
};
//SIG(1 BFu9s_BFu32i_Uc) C1{ Fs:9 Fi:32 Fc}



static void Test_BFu9s_BFu32i_Uc()
{
  {
    init_simple_test("BFu9s_BFu32i_Uc");
    static STRUCT_IF_C BFu9s_BFu32i_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu32i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_Uc");
    check_field_offset(lv, v3, 8, "BFu9s_BFu32i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_Uc, BFu9s_BFu32i_Uc)
//============================================================================


struct  BFu9s_BFu32i_Ui  {
  unsigned short v1:9;
  unsigned int v2:32;
  unsigned int v3;
};
//SIG(1 BFu9s_BFu32i_Ui) C1{ Fs:9 Fi:32 Fi}



static void Test_BFu9s_BFu32i_Ui()
{
  {
    init_simple_test("BFu9s_BFu32i_Ui");
    static STRUCT_IF_C BFu9s_BFu32i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu32i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_Ui");
    check_field_offset(lv, v3, 8, "BFu9s_BFu32i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_Ui, BFu9s_BFu32i_Ui)
//============================================================================


struct  BFu9s_BFu32i_Ul  {
  unsigned short v1:9;
  unsigned int v2:32;
  __tsu64 v3;
};
//SIG(1 BFu9s_BFu32i_Ul) C1{ Fs:9 Fi:32 FL}



static void Test_BFu9s_BFu32i_Ul()
{
  {
    init_simple_test("BFu9s_BFu32i_Ul");
    static STRUCT_IF_C BFu9s_BFu32i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu9s_BFu32i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_Ul");
    check_field_offset(lv, v3, 8, "BFu9s_BFu32i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_Ul, BFu9s_BFu32i_Ul)
//============================================================================


struct  BFu9s_BFu32i_Us  {
  unsigned short v1:9;
  unsigned int v2:32;
  unsigned short v3;
};
//SIG(1 BFu9s_BFu32i_Us) C1{ Fs:9 Fi:32 Fs}



static void Test_BFu9s_BFu32i_Us()
{
  {
    init_simple_test("BFu9s_BFu32i_Us");
    static STRUCT_IF_C BFu9s_BFu32i_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_BFu32i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_Us");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_Us");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_Us");
    check_field_offset(lv, v3, 8, "BFu9s_BFu32i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_Us, BFu9s_BFu32i_Us)
//============================================================================


struct  BFu9s_BFu32i_Vp  {
  unsigned short v1:9;
  unsigned int v2:32;
  void *v3;
};
//SIG(1 BFu9s_BFu32i_Vp) C1{ Fs:9 Fi:32 Fp}



static void Test_BFu9s_BFu32i_Vp()
{
  {
    init_simple_test("BFu9s_BFu32i_Vp");
    static STRUCT_IF_C BFu9s_BFu32i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu32i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_Vp");
    check_field_offset(lv, v3, 8, "BFu9s_BFu32i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_Vp, BFu9s_BFu32i_Vp)
//============================================================================


struct  BFu9s_BFu32ll  {
  unsigned short v1:9;
  __tsu64 v2:32;
};
//SIG(1 BFu9s_BFu32ll) C1{ Fs:9 FL:32}



static void Test_BFu9s_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll, BFu9s_BFu32ll)
//============================================================================


struct  BFu9s_BFu32ll_BFu15i  {
  unsigned short v1:9;
  __tsu64 v2:32;
  unsigned int v3:15;
};
//SIG(1 BFu9s_BFu32ll_BFu15i) C1{ Fs:9 FL:32 Fi:15}



static void Test_BFu9s_BFu32ll_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu15i");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 5, 1, 15, 1, "BFu9s_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 5, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu32ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu15i, BFu9s_BFu32ll_BFu15i)
//============================================================================


struct  BFu9s_BFu32ll_BFu15ll  {
  unsigned short v1:9;
  __tsu64 v2:32;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_BFu32ll_BFu15ll) C1{ Fs:9 FL:32 FL:15}



static void Test_BFu9s_BFu32ll_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, 5, 1, 15, 1, "BFu9s_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, 5, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu32ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu15ll, BFu9s_BFu32ll_BFu15ll)
//============================================================================


struct  BFu9s_BFu32ll_BFu15s  {
  unsigned short v1:9;
  __tsu64 v2:32;
  unsigned short v3:15;
};
//SIG(1 BFu9s_BFu32ll_BFu15s) C1{ Fs:9 FL:32 Fs:15}



static void Test_BFu9s_BFu32ll_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu15s");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu9s_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu32ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu15s, BFu9s_BFu32ll_BFu15s)
//============================================================================


struct  BFu9s_BFu32ll_BFu16i  {
  unsigned short v1:9;
  __tsu64 v2:32;
  unsigned int v3:16;
};
//SIG(1 BFu9s_BFu32ll_BFu16i) C1{ Fs:9 FL:32 Fi:16}



static void Test_BFu9s_BFu32ll_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu16i");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 5, 1, 16, 1, "BFu9s_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 5, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu32ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu16i, BFu9s_BFu32ll_BFu16i)
//============================================================================


struct  BFu9s_BFu32ll_BFu16ll  {
  unsigned short v1:9;
  __tsu64 v2:32;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_BFu32ll_BFu16ll) C1{ Fs:9 FL:32 FL:16}



static void Test_BFu9s_BFu32ll_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, 5, 1, 16, 1, "BFu9s_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, 5, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu32ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu16ll, BFu9s_BFu32ll_BFu16ll)
//============================================================================


struct  BFu9s_BFu32ll_BFu16s  {
  unsigned short v1:9;
  __tsu64 v2:32;
  unsigned short v3:16;
};
//SIG(1 BFu9s_BFu32ll_BFu16s) C1{ Fs:9 FL:32 Fs:16}



static void Test_BFu9s_BFu32ll_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu16s");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu9s_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu32ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu16s, BFu9s_BFu32ll_BFu16s)
//============================================================================


struct  BFu9s_BFu32ll_BFu17i  {
  unsigned short v1:9;
  __tsu64 v2:32;
  unsigned int v3:17;
};
//SIG(1 BFu9s_BFu32ll_BFu17i) C1{ Fs:9 FL:32 Fi:17}



static void Test_BFu9s_BFu32ll_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu17i");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 5, 1, 17, 1, "BFu9s_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 5, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu32ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu17i, BFu9s_BFu32ll_BFu17i)
//============================================================================


struct  BFu9s_BFu32ll_BFu17ll  {
  unsigned short v1:9;
  __tsu64 v2:32;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_BFu32ll_BFu17ll) C1{ Fs:9 FL:32 FL:17}



static void Test_BFu9s_BFu32ll_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, 5, 1, 17, 1, "BFu9s_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, 5, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu32ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu17ll, BFu9s_BFu32ll_BFu17ll)
//============================================================================


struct  BFu9s_BFu32ll_BFu1c  {
  unsigned short v1:9;
  __tsu64 v2:32;
  unsigned char v3:1;
};
//SIG(1 BFu9s_BFu32ll_BFu1c) C1{ Fs:9 FL:32 Fc:1}



static void Test_BFu9s_BFu32ll_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu1c");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu1c");
    set_bf_and_test(lv, v3, 5, 1, 1, 1, "BFu9s_BFu32ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu1c, BFu9s_BFu32ll_BFu1c)
//============================================================================


struct  BFu9s_BFu32ll_BFu1i  {
  unsigned short v1:9;
  __tsu64 v2:32;
  unsigned int v3:1;
};
//SIG(1 BFu9s_BFu32ll_BFu1i) C1{ Fs:9 FL:32 Fi:1}



static void Test_BFu9s_BFu32ll_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu1i");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu1i");
    set_bf_and_test(lv, v3, 5, 1, 1, 1, "BFu9s_BFu32ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu1i, BFu9s_BFu32ll_BFu1i)
//============================================================================


struct  BFu9s_BFu32ll_BFu1ll  {
  unsigned short v1:9;
  __tsu64 v2:32;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_BFu32ll_BFu1ll) C1{ Fs:9 FL:32 FL:1}



static void Test_BFu9s_BFu32ll_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v3, 5, 1, 1, 1, "BFu9s_BFu32ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu1ll, BFu9s_BFu32ll_BFu1ll)
//============================================================================


struct  BFu9s_BFu32ll_BFu1s  {
  unsigned short v1:9;
  __tsu64 v2:32;
  unsigned short v3:1;
};
//SIG(1 BFu9s_BFu32ll_BFu1s) C1{ Fs:9 FL:32 Fs:1}



static void Test_BFu9s_BFu32ll_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu1s");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu1s");
    set_bf_and_test(lv, v3, 5, 1, 1, 1, "BFu9s_BFu32ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu1s, BFu9s_BFu32ll_BFu1s)
//============================================================================


struct  BFu9s_BFu32ll_BFu31i  {
  unsigned short v1:9;
  __tsu64 v2:32;
  unsigned int v3:31;
};
//SIG(1 BFu9s_BFu32ll_BFu31i) C1{ Fs:9 FL:32 Fi:31}



static void Test_BFu9s_BFu32ll_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu31i");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu32ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu9s_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu32ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu31i, BFu9s_BFu32ll_BFu31i)
//============================================================================


struct  BFu9s_BFu32ll_BFu31ll  {
  unsigned short v1:9;
  __tsu64 v2:32;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_BFu32ll_BFu31ll) C1{ Fs:9 FL:32 FL:31}



static void Test_BFu9s_BFu32ll_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu32ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 31, 1, "BFu9s_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 31, hide_ull(1LL<<30), "BFu9s_BFu32ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu31ll, BFu9s_BFu32ll_BFu31ll)
//============================================================================


struct  BFu9s_BFu32ll_BFu32i  {
  unsigned short v1:9;
  __tsu64 v2:32;
  unsigned int v3:32;
};
//SIG(1 BFu9s_BFu32ll_BFu32i) C1{ Fs:9 FL:32 Fi:32}



static void Test_BFu9s_BFu32ll_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu32i");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu9s_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu32i, BFu9s_BFu32ll_BFu32i)
//============================================================================


struct  BFu9s_BFu32ll_BFu32ll  {
  unsigned short v1:9;
  __tsu64 v2:32;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_BFu32ll_BFu32ll) C1{ Fs:9 FL:32 FL:32}



static void Test_BFu9s_BFu32ll_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 32, 1, "BFu9s_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu32ll, BFu9s_BFu32ll_BFu32ll)
//============================================================================


struct  BFu9s_BFu32ll_BFu33  {
  unsigned short v1:9;
  __tsu64 v2:32;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_BFu32ll_BFu33) C1{ Fs:9 FL:32 FL:33}



static void Test_BFu9s_BFu32ll_BFu33()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu33");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu32ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 33, 1, "BFu9s_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 33, hide_ull(1LL<<32), "BFu9s_BFu32ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu33, BFu9s_BFu32ll_BFu33)
//============================================================================


struct  BFu9s_BFu32ll_BFu7c  {
  unsigned short v1:9;
  __tsu64 v2:32;
  unsigned char v3:7;
};
//SIG(1 BFu9s_BFu32ll_BFu7c) C1{ Fs:9 FL:32 Fc:7}



static void Test_BFu9s_BFu32ll_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu7c");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 1, 7, 1, "BFu9s_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu32ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu7c, BFu9s_BFu32ll_BFu7c)
//============================================================================


struct  BFu9s_BFu32ll_BFu7i  {
  unsigned short v1:9;
  __tsu64 v2:32;
  unsigned int v3:7;
};
//SIG(1 BFu9s_BFu32ll_BFu7i) C1{ Fs:9 FL:32 Fi:7}



static void Test_BFu9s_BFu32ll_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu7i");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 5, 1, 7, 1, "BFu9s_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 5, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu32ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu7i, BFu9s_BFu32ll_BFu7i)
//============================================================================


struct  BFu9s_BFu32ll_BFu7ll  {
  unsigned short v1:9;
  __tsu64 v2:32;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_BFu32ll_BFu7ll) C1{ Fs:9 FL:32 FL:7}



static void Test_BFu9s_BFu32ll_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, 5, 1, 7, 1, "BFu9s_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, 5, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu32ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu7ll, BFu9s_BFu32ll_BFu7ll)
//============================================================================


struct  BFu9s_BFu32ll_BFu7s  {
  unsigned short v1:9;
  __tsu64 v2:32;
  unsigned short v3:7;
};
//SIG(1 BFu9s_BFu32ll_BFu7s) C1{ Fs:9 FL:32 Fs:7}



static void Test_BFu9s_BFu32ll_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu7s");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 5, 1, 7, 1, "BFu9s_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 5, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu32ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu7s, BFu9s_BFu32ll_BFu7s)
//============================================================================


struct  BFu9s_BFu32ll_BFu8c  {
  unsigned short v1:9;
  __tsu64 v2:32;
  unsigned char v3:8;
};
//SIG(1 BFu9s_BFu32ll_BFu8c) C1{ Fs:9 FL:32 Fc:8}



static void Test_BFu9s_BFu32ll_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu8c");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu9s_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu32ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu8c, BFu9s_BFu32ll_BFu8c)
//============================================================================


struct  BFu9s_BFu32ll_BFu8i  {
  unsigned short v1:9;
  __tsu64 v2:32;
  unsigned int v3:8;
};
//SIG(1 BFu9s_BFu32ll_BFu8i) C1{ Fs:9 FL:32 Fi:8}



static void Test_BFu9s_BFu32ll_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu8i");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 5, 1, 8, 1, "BFu9s_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 5, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu32ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu8i, BFu9s_BFu32ll_BFu8i)
//============================================================================


struct  BFu9s_BFu32ll_BFu8ll  {
  unsigned short v1:9;
  __tsu64 v2:32;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_BFu32ll_BFu8ll) C1{ Fs:9 FL:32 FL:8}



static void Test_BFu9s_BFu32ll_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, 5, 1, 8, 1, "BFu9s_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, 5, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu32ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu8ll, BFu9s_BFu32ll_BFu8ll)
//============================================================================


struct  BFu9s_BFu32ll_BFu8s  {
  unsigned short v1:9;
  __tsu64 v2:32;
  unsigned short v3:8;
};
//SIG(1 BFu9s_BFu32ll_BFu8s) C1{ Fs:9 FL:32 Fs:8}



static void Test_BFu9s_BFu32ll_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu8s");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu9s_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu32ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu8s, BFu9s_BFu32ll_BFu8s)
//============================================================================


struct  BFu9s_BFu32ll_BFu9i  {
  unsigned short v1:9;
  __tsu64 v2:32;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFu32ll_BFu9i) C1{ Fs:9 FL:32 Fi:9}



static void Test_BFu9s_BFu32ll_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu9i");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 5, 1, 9, 1, "BFu9s_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 5, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu9i, BFu9s_BFu32ll_BFu9i)
//============================================================================


struct  BFu9s_BFu32ll_BFu9ll  {
  unsigned short v1:9;
  __tsu64 v2:32;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFu32ll_BFu9ll) C1{ Fs:9 FL:32 FL:9}



static void Test_BFu9s_BFu32ll_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, 5, 1, 9, 1, "BFu9s_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, 5, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu9ll, BFu9s_BFu32ll_BFu9ll)
//============================================================================


struct  BFu9s_BFu32ll_BFu9s  {
  unsigned short v1:9;
  __tsu64 v2:32;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFu32ll_BFu9s) C1{ Fs:9 FL:32 Fs:9}



static void Test_BFu9s_BFu32ll_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu9s");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu9s_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu9s, BFu9s_BFu32ll_BFu9s)
//============================================================================


struct  BFu9s_BFu32ll_C  {
  unsigned short v1:9;
  __tsu64 v2:32;
  char v3;
};
//SIG(1 BFu9s_BFu32ll_C) C1{ Fs:9 FL:32 Fc}



static void Test_BFu9s_BFu32ll_C()
{
  {
    init_simple_test("BFu9s_BFu32ll_C");
    static STRUCT_IF_C BFu9s_BFu32ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_C");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_C");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_C");
    check_field_offset(lv, v3, 6, "BFu9s_BFu32ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_C, BFu9s_BFu32ll_C)
//============================================================================


struct  BFu9s_BFu32ll_D  {
  unsigned short v1:9;
  __tsu64 v2:32;
  double v3;
};
//SIG(1 BFu9s_BFu32ll_D) C1{ Fs:9 FL:32 FL}



static void Test_BFu9s_BFu32ll_D()
{
  {
    init_simple_test("BFu9s_BFu32ll_D");
    static STRUCT_IF_C BFu9s_BFu32ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu9s_BFu32ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_D");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_D");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_D");
    check_field_offset(lv, v3, 8, "BFu9s_BFu32ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_D, BFu9s_BFu32ll_D)
//============================================================================


struct  BFu9s_BFu32ll_F  {
  unsigned short v1:9;
  __tsu64 v2:32;
  float v3;
};
//SIG(1 BFu9s_BFu32ll_F) C1{ Fs:9 FL:32 Fi}



static void Test_BFu9s_BFu32ll_F()
{
  {
    init_simple_test("BFu9s_BFu32ll_F");
    static STRUCT_IF_C BFu9s_BFu32ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu32ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_F");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_F");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_F");
    check_field_offset(lv, v3, 8, "BFu9s_BFu32ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_F, BFu9s_BFu32ll_F)
//============================================================================


struct  BFu9s_BFu32ll_I  {
  unsigned short v1:9;
  __tsu64 v2:32;
  int v3;
};
//SIG(1 BFu9s_BFu32ll_I) C1{ Fs:9 FL:32 Fi}



static void Test_BFu9s_BFu32ll_I()
{
  {
    init_simple_test("BFu9s_BFu32ll_I");
    static STRUCT_IF_C BFu9s_BFu32ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu32ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_I");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_I");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_I");
    check_field_offset(lv, v3, 8, "BFu9s_BFu32ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_I, BFu9s_BFu32ll_I)
//============================================================================


struct  BFu9s_BFu32ll_Ip  {
  unsigned short v1:9;
  __tsu64 v2:32;
  int *v3;
};
//SIG(1 BFu9s_BFu32ll_Ip) C1{ Fs:9 FL:32 Fp}



static void Test_BFu9s_BFu32ll_Ip()
{
  {
    init_simple_test("BFu9s_BFu32ll_Ip");
    static STRUCT_IF_C BFu9s_BFu32ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu32ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_Ip");
    check_field_offset(lv, v3, 8, "BFu9s_BFu32ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_Ip, BFu9s_BFu32ll_Ip)
//============================================================================


struct  BFu9s_BFu32ll_L  {
  unsigned short v1:9;
  __tsu64 v2:32;
  __tsi64 v3;
};
//SIG(1 BFu9s_BFu32ll_L) C1{ Fs:9 FL:32 FL}



static void Test_BFu9s_BFu32ll_L()
{
  {
    init_simple_test("BFu9s_BFu32ll_L");
    static STRUCT_IF_C BFu9s_BFu32ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu9s_BFu32ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_L");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_L");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_L");
    check_field_offset(lv, v3, 8, "BFu9s_BFu32ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_L, BFu9s_BFu32ll_L)
//============================================================================


struct  BFu9s_BFu32ll_S  {
  unsigned short v1:9;
  __tsu64 v2:32;
  short v3;
};
//SIG(1 BFu9s_BFu32ll_S) C1{ Fs:9 FL:32 Fs}



static void Test_BFu9s_BFu32ll_S()
{
  {
    init_simple_test("BFu9s_BFu32ll_S");
    static STRUCT_IF_C BFu9s_BFu32ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_S");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_S");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_S");
    check_field_offset(lv, v3, 6, "BFu9s_BFu32ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_S, BFu9s_BFu32ll_S)
//============================================================================


struct  BFu9s_BFu32ll_Uc  {
  unsigned short v1:9;
  __tsu64 v2:32;
  unsigned char v3;
};
//SIG(1 BFu9s_BFu32ll_Uc) C1{ Fs:9 FL:32 Fc}



static void Test_BFu9s_BFu32ll_Uc()
{
  {
    init_simple_test("BFu9s_BFu32ll_Uc");
    static STRUCT_IF_C BFu9s_BFu32ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_Uc");
    check_field_offset(lv, v3, 6, "BFu9s_BFu32ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_Uc, BFu9s_BFu32ll_Uc)
//============================================================================


struct  BFu9s_BFu32ll_Ui  {
  unsigned short v1:9;
  __tsu64 v2:32;
  unsigned int v3;
};
//SIG(1 BFu9s_BFu32ll_Ui) C1{ Fs:9 FL:32 Fi}



static void Test_BFu9s_BFu32ll_Ui()
{
  {
    init_simple_test("BFu9s_BFu32ll_Ui");
    static STRUCT_IF_C BFu9s_BFu32ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu32ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_Ui");
    check_field_offset(lv, v3, 8, "BFu9s_BFu32ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_Ui, BFu9s_BFu32ll_Ui)
//============================================================================


struct  BFu9s_BFu32ll_Ul  {
  unsigned short v1:9;
  __tsu64 v2:32;
  __tsu64 v3;
};
//SIG(1 BFu9s_BFu32ll_Ul) C1{ Fs:9 FL:32 FL}



static void Test_BFu9s_BFu32ll_Ul()
{
  {
    init_simple_test("BFu9s_BFu32ll_Ul");
    static STRUCT_IF_C BFu9s_BFu32ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu9s_BFu32ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_Ul");
    check_field_offset(lv, v3, 8, "BFu9s_BFu32ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_Ul, BFu9s_BFu32ll_Ul)
//============================================================================


struct  BFu9s_BFu32ll_Us  {
  unsigned short v1:9;
  __tsu64 v2:32;
  unsigned short v3;
};
//SIG(1 BFu9s_BFu32ll_Us) C1{ Fs:9 FL:32 Fs}



static void Test_BFu9s_BFu32ll_Us()
{
  {
    init_simple_test("BFu9s_BFu32ll_Us");
    static STRUCT_IF_C BFu9s_BFu32ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_Us");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_Us");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_Us");
    check_field_offset(lv, v3, 6, "BFu9s_BFu32ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_Us, BFu9s_BFu32ll_Us)
//============================================================================


struct  BFu9s_BFu32ll_Vp  {
  unsigned short v1:9;
  __tsu64 v2:32;
  void *v3;
};
//SIG(1 BFu9s_BFu32ll_Vp) C1{ Fs:9 FL:32 Fp}



static void Test_BFu9s_BFu32ll_Vp()
{
  {
    init_simple_test("BFu9s_BFu32ll_Vp");
    static STRUCT_IF_C BFu9s_BFu32ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu32ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_Vp");
    check_field_offset(lv, v3, 8, "BFu9s_BFu32ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_Vp, BFu9s_BFu32ll_Vp)
//============================================================================


struct  BFu9s_BFu33  {
  unsigned short v1:9;
  __tsu64 v2:33;
};
//SIG(1 BFu9s_BFu33) C1{ Fs:9 FL:33}



static void Test_BFu9s_BFu33()
{
  {
    init_simple_test("BFu9s_BFu33");
    static STRUCT_IF_C BFu9s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33, BFu9s_BFu33)
//============================================================================


struct  BFu9s_BFu33_BFu15i  {
  unsigned short v1:9;
  __tsu64 v2:33;
  unsigned int v3:15;
};
//SIG(1 BFu9s_BFu33_BFu15i) C1{ Fs:9 FL:33 Fi:15}



static void Test_BFu9s_BFu33_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu33_BFu15i");
    static STRUCT_IF_C BFu9s_BFu33_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 5, 2, 15, 1, "BFu9s_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 5, 2, 15, hide_ull(1LL<<14), "BFu9s_BFu33_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu15i, BFu9s_BFu33_BFu15i)
//============================================================================


struct  BFu9s_BFu33_BFu15ll  {
  unsigned short v1:9;
  __tsu64 v2:33;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_BFu33_BFu15ll) C1{ Fs:9 FL:33 FL:15}



static void Test_BFu9s_BFu33_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu33_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu33_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, 5, 2, 15, 1, "BFu9s_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, 5, 2, 15, hide_ull(1LL<<14), "BFu9s_BFu33_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu15ll, BFu9s_BFu33_BFu15ll)
//============================================================================


struct  BFu9s_BFu33_BFu15s  {
  unsigned short v1:9;
  __tsu64 v2:33;
  unsigned short v3:15;
};
//SIG(1 BFu9s_BFu33_BFu15s) C1{ Fs:9 FL:33 Fs:15}



static void Test_BFu9s_BFu33_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu33_BFu15s");
    static STRUCT_IF_C BFu9s_BFu33_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu9s_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu33_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu15s, BFu9s_BFu33_BFu15s)
//============================================================================


struct  BFu9s_BFu33_BFu16i  {
  unsigned short v1:9;
  __tsu64 v2:33;
  unsigned int v3:16;
};
//SIG(1 BFu9s_BFu33_BFu16i) C1{ Fs:9 FL:33 Fi:16}



static void Test_BFu9s_BFu33_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu33_BFu16i");
    static STRUCT_IF_C BFu9s_BFu33_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 5, 2, 16, 1, "BFu9s_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 5, 2, 16, hide_ull(1LL<<15), "BFu9s_BFu33_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu16i, BFu9s_BFu33_BFu16i)
//============================================================================


struct  BFu9s_BFu33_BFu16ll  {
  unsigned short v1:9;
  __tsu64 v2:33;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_BFu33_BFu16ll) C1{ Fs:9 FL:33 FL:16}



static void Test_BFu9s_BFu33_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu33_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu33_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, 5, 2, 16, 1, "BFu9s_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, 5, 2, 16, hide_ull(1LL<<15), "BFu9s_BFu33_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu16ll, BFu9s_BFu33_BFu16ll)
//============================================================================


struct  BFu9s_BFu33_BFu16s  {
  unsigned short v1:9;
  __tsu64 v2:33;
  unsigned short v3:16;
};
//SIG(1 BFu9s_BFu33_BFu16s) C1{ Fs:9 FL:33 Fs:16}



static void Test_BFu9s_BFu33_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu33_BFu16s");
    static STRUCT_IF_C BFu9s_BFu33_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu9s_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu33_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu16s, BFu9s_BFu33_BFu16s)
//============================================================================


struct  BFu9s_BFu33_BFu17i  {
  unsigned short v1:9;
  __tsu64 v2:33;
  unsigned int v3:17;
};
//SIG(1 BFu9s_BFu33_BFu17i) C1{ Fs:9 FL:33 Fi:17}



static void Test_BFu9s_BFu33_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu33_BFu17i");
    static STRUCT_IF_C BFu9s_BFu33_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 5, 2, 17, 1, "BFu9s_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 5, 2, 17, hide_ull(1LL<<16), "BFu9s_BFu33_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu17i, BFu9s_BFu33_BFu17i)
//============================================================================


struct  BFu9s_BFu33_BFu17ll  {
  unsigned short v1:9;
  __tsu64 v2:33;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_BFu33_BFu17ll) C1{ Fs:9 FL:33 FL:17}



static void Test_BFu9s_BFu33_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu33_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu33_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, 5, 2, 17, 1, "BFu9s_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, 5, 2, 17, hide_ull(1LL<<16), "BFu9s_BFu33_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu17ll, BFu9s_BFu33_BFu17ll)
//============================================================================


struct  BFu9s_BFu33_BFu1c  {
  unsigned short v1:9;
  __tsu64 v2:33;
  unsigned char v3:1;
};
//SIG(1 BFu9s_BFu33_BFu1c) C1{ Fs:9 FL:33 Fc:1}



static void Test_BFu9s_BFu33_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu33_BFu1c");
    static STRUCT_IF_C BFu9s_BFu33_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu1c");
    set_bf_and_test(lv, v3, 5, 2, 1, 1, "BFu9s_BFu33_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu1c, BFu9s_BFu33_BFu1c)
//============================================================================


struct  BFu9s_BFu33_BFu1i  {
  unsigned short v1:9;
  __tsu64 v2:33;
  unsigned int v3:1;
};
//SIG(1 BFu9s_BFu33_BFu1i) C1{ Fs:9 FL:33 Fi:1}



static void Test_BFu9s_BFu33_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu33_BFu1i");
    static STRUCT_IF_C BFu9s_BFu33_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu1i");
    set_bf_and_test(lv, v3, 5, 2, 1, 1, "BFu9s_BFu33_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu1i, BFu9s_BFu33_BFu1i)
//============================================================================


struct  BFu9s_BFu33_BFu1ll  {
  unsigned short v1:9;
  __tsu64 v2:33;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_BFu33_BFu1ll) C1{ Fs:9 FL:33 FL:1}



static void Test_BFu9s_BFu33_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu33_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu33_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu1ll");
    set_bf_and_test(lv, v3, 5, 2, 1, 1, "BFu9s_BFu33_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu1ll, BFu9s_BFu33_BFu1ll)
//============================================================================


struct  BFu9s_BFu33_BFu1s  {
  unsigned short v1:9;
  __tsu64 v2:33;
  unsigned short v3:1;
};
//SIG(1 BFu9s_BFu33_BFu1s) C1{ Fs:9 FL:33 Fs:1}



static void Test_BFu9s_BFu33_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu33_BFu1s");
    static STRUCT_IF_C BFu9s_BFu33_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu1s");
    set_bf_and_test(lv, v3, 5, 2, 1, 1, "BFu9s_BFu33_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu1s, BFu9s_BFu33_BFu1s)
//============================================================================


struct  BFu9s_BFu33_BFu31i  {
  unsigned short v1:9;
  __tsu64 v2:33;
  unsigned int v3:31;
};
//SIG(1 BFu9s_BFu33_BFu31i) C1{ Fs:9 FL:33 Fi:31}



static void Test_BFu9s_BFu33_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu33_BFu31i");
    static STRUCT_IF_C BFu9s_BFu33_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu33_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu9s_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu33_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu31i, BFu9s_BFu33_BFu31i)
//============================================================================


struct  BFu9s_BFu33_BFu31ll  {
  unsigned short v1:9;
  __tsu64 v2:33;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_BFu33_BFu31ll) C1{ Fs:9 FL:33 FL:31}



static void Test_BFu9s_BFu33_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu33_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu33_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu33_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,2), 31, 1, "BFu9s_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,2), 31, hide_ull(1LL<<30), "BFu9s_BFu33_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu31ll, BFu9s_BFu33_BFu31ll)
//============================================================================


struct  BFu9s_BFu33_BFu32i  {
  unsigned short v1:9;
  __tsu64 v2:33;
  unsigned int v3:32;
};
//SIG(1 BFu9s_BFu33_BFu32i) C1{ Fs:9 FL:33 Fi:32}



static void Test_BFu9s_BFu33_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu33_BFu32i");
    static STRUCT_IF_C BFu9s_BFu33_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu33_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu9s_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu33_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu32i, BFu9s_BFu33_BFu32i)
//============================================================================


struct  BFu9s_BFu33_BFu32ll  {
  unsigned short v1:9;
  __tsu64 v2:33;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_BFu33_BFu32ll) C1{ Fs:9 FL:33 FL:32}



static void Test_BFu9s_BFu33_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu33_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu33_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu33_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,2), 32, 1, "BFu9s_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,2), 32, hide_ull(1LL<<31), "BFu9s_BFu33_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu32ll, BFu9s_BFu33_BFu32ll)
//============================================================================


struct  BFu9s_BFu33_BFu33  {
  unsigned short v1:9;
  __tsu64 v2:33;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_BFu33_BFu33) C1{ Fs:9 FL:33 FL:33}



static void Test_BFu9s_BFu33_BFu33()
{
  {
    init_simple_test("BFu9s_BFu33_BFu33");
    static STRUCT_IF_C BFu9s_BFu33_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu33_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,2), 33, 1, "BFu9s_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,2), 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu33, BFu9s_BFu33_BFu33)
//============================================================================


struct  BFu9s_BFu33_BFu7c  {
  unsigned short v1:9;
  __tsu64 v2:33;
  unsigned char v3:7;
};
//SIG(1 BFu9s_BFu33_BFu7c) C1{ Fs:9 FL:33 Fc:7}



static void Test_BFu9s_BFu33_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu33_BFu7c");
    static STRUCT_IF_C BFu9s_BFu33_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu9s_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu33_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu7c, BFu9s_BFu33_BFu7c)
//============================================================================


struct  BFu9s_BFu33_BFu7i  {
  unsigned short v1:9;
  __tsu64 v2:33;
  unsigned int v3:7;
};
//SIG(1 BFu9s_BFu33_BFu7i) C1{ Fs:9 FL:33 Fi:7}



static void Test_BFu9s_BFu33_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu33_BFu7i");
    static STRUCT_IF_C BFu9s_BFu33_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 5, 2, 7, 1, "BFu9s_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 5, 2, 7, hide_ull(1LL<<6), "BFu9s_BFu33_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu7i, BFu9s_BFu33_BFu7i)
//============================================================================


struct  BFu9s_BFu33_BFu7ll  {
  unsigned short v1:9;
  __tsu64 v2:33;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_BFu33_BFu7ll) C1{ Fs:9 FL:33 FL:7}



static void Test_BFu9s_BFu33_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu33_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu33_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 5, 2, 7, 1, "BFu9s_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 5, 2, 7, hide_ull(1LL<<6), "BFu9s_BFu33_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu7ll, BFu9s_BFu33_BFu7ll)
//============================================================================


struct  BFu9s_BFu33_BFu7s  {
  unsigned short v1:9;
  __tsu64 v2:33;
  unsigned short v3:7;
};
//SIG(1 BFu9s_BFu33_BFu7s) C1{ Fs:9 FL:33 Fs:7}



static void Test_BFu9s_BFu33_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu33_BFu7s");
    static STRUCT_IF_C BFu9s_BFu33_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu9s_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu33_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu7s, BFu9s_BFu33_BFu7s)
//============================================================================


struct  BFu9s_BFu33_BFu8c  {
  unsigned short v1:9;
  __tsu64 v2:33;
  unsigned char v3:8;
};
//SIG(1 BFu9s_BFu33_BFu8c) C1{ Fs:9 FL:33 Fc:8}



static void Test_BFu9s_BFu33_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu33_BFu8c");
    static STRUCT_IF_C BFu9s_BFu33_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu9s_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu33_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu8c, BFu9s_BFu33_BFu8c)
//============================================================================


struct  BFu9s_BFu33_BFu8i  {
  unsigned short v1:9;
  __tsu64 v2:33;
  unsigned int v3:8;
};
//SIG(1 BFu9s_BFu33_BFu8i) C1{ Fs:9 FL:33 Fi:8}



static void Test_BFu9s_BFu33_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu33_BFu8i");
    static STRUCT_IF_C BFu9s_BFu33_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 5, 2, 8, 1, "BFu9s_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 5, 2, 8, hide_ull(1LL<<7), "BFu9s_BFu33_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu8i, BFu9s_BFu33_BFu8i)
//============================================================================


struct  BFu9s_BFu33_BFu8ll  {
  unsigned short v1:9;
  __tsu64 v2:33;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_BFu33_BFu8ll) C1{ Fs:9 FL:33 FL:8}



static void Test_BFu9s_BFu33_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu33_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu33_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 5, 2, 8, 1, "BFu9s_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 5, 2, 8, hide_ull(1LL<<7), "BFu9s_BFu33_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu8ll, BFu9s_BFu33_BFu8ll)
//============================================================================


struct  BFu9s_BFu33_BFu8s  {
  unsigned short v1:9;
  __tsu64 v2:33;
  unsigned short v3:8;
};
//SIG(1 BFu9s_BFu33_BFu8s) C1{ Fs:9 FL:33 Fs:8}



static void Test_BFu9s_BFu33_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu33_BFu8s");
    static STRUCT_IF_C BFu9s_BFu33_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu9s_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu33_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu8s, BFu9s_BFu33_BFu8s)
//============================================================================


struct  BFu9s_BFu33_BFu9i  {
  unsigned short v1:9;
  __tsu64 v2:33;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFu33_BFu9i) C1{ Fs:9 FL:33 Fi:9}



static void Test_BFu9s_BFu33_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu33_BFu9i");
    static STRUCT_IF_C BFu9s_BFu33_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 5, 2, 9, 1, "BFu9s_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 5, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu9i, BFu9s_BFu33_BFu9i)
//============================================================================


struct  BFu9s_BFu33_BFu9ll  {
  unsigned short v1:9;
  __tsu64 v2:33;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFu33_BFu9ll) C1{ Fs:9 FL:33 FL:9}



static void Test_BFu9s_BFu33_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu33_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu33_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 5, 2, 9, 1, "BFu9s_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 5, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu9ll, BFu9s_BFu33_BFu9ll)
//============================================================================


struct  BFu9s_BFu33_BFu9s  {
  unsigned short v1:9;
  __tsu64 v2:33;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFu33_BFu9s) C1{ Fs:9 FL:33 Fs:9}



static void Test_BFu9s_BFu33_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu33_BFu9s");
    static STRUCT_IF_C BFu9s_BFu33_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu9s_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu9s, BFu9s_BFu33_BFu9s)
//============================================================================


struct  BFu9s_BFu33_C  {
  unsigned short v1:9;
  __tsu64 v2:33;
  char v3;
};
//SIG(1 BFu9s_BFu33_C) C1{ Fs:9 FL:33 Fc}



static void Test_BFu9s_BFu33_C()
{
  {
    init_simple_test("BFu9s_BFu33_C");
    static STRUCT_IF_C BFu9s_BFu33_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_C");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_C");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_C");
    check_field_offset(lv, v3, 6, "BFu9s_BFu33_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_C, BFu9s_BFu33_C)
//============================================================================


struct  BFu9s_BFu33_D  {
  unsigned short v1:9;
  __tsu64 v2:33;
  double v3;
};
//SIG(1 BFu9s_BFu33_D) C1{ Fs:9 FL:33 FL}



static void Test_BFu9s_BFu33_D()
{
  {
    init_simple_test("BFu9s_BFu33_D");
    static STRUCT_IF_C BFu9s_BFu33_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu9s_BFu33_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_D");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_D");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_D");
    check_field_offset(lv, v3, 8, "BFu9s_BFu33_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_D, BFu9s_BFu33_D)
//============================================================================


struct  BFu9s_BFu33_F  {
  unsigned short v1:9;
  __tsu64 v2:33;
  float v3;
};
//SIG(1 BFu9s_BFu33_F) C1{ Fs:9 FL:33 Fi}



static void Test_BFu9s_BFu33_F()
{
  {
    init_simple_test("BFu9s_BFu33_F");
    static STRUCT_IF_C BFu9s_BFu33_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu33_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_F");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_F");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_F");
    check_field_offset(lv, v3, 8, "BFu9s_BFu33_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_F, BFu9s_BFu33_F)
//============================================================================


struct  BFu9s_BFu33_I  {
  unsigned short v1:9;
  __tsu64 v2:33;
  int v3;
};
//SIG(1 BFu9s_BFu33_I) C1{ Fs:9 FL:33 Fi}



static void Test_BFu9s_BFu33_I()
{
  {
    init_simple_test("BFu9s_BFu33_I");
    static STRUCT_IF_C BFu9s_BFu33_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu33_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_I");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_I");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_I");
    check_field_offset(lv, v3, 8, "BFu9s_BFu33_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_I, BFu9s_BFu33_I)
//============================================================================


struct  BFu9s_BFu33_Ip  {
  unsigned short v1:9;
  __tsu64 v2:33;
  int *v3;
};
//SIG(1 BFu9s_BFu33_Ip) C1{ Fs:9 FL:33 Fp}



static void Test_BFu9s_BFu33_Ip()
{
  {
    init_simple_test("BFu9s_BFu33_Ip");
    static STRUCT_IF_C BFu9s_BFu33_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu33_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_Ip");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_Ip");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_Ip");
    check_field_offset(lv, v3, 8, "BFu9s_BFu33_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_Ip, BFu9s_BFu33_Ip)
//============================================================================


struct  BFu9s_BFu33_L  {
  unsigned short v1:9;
  __tsu64 v2:33;
  __tsi64 v3;
};
//SIG(1 BFu9s_BFu33_L) C1{ Fs:9 FL:33 FL}



static void Test_BFu9s_BFu33_L()
{
  {
    init_simple_test("BFu9s_BFu33_L");
    static STRUCT_IF_C BFu9s_BFu33_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu9s_BFu33_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_L");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_L");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_L");
    check_field_offset(lv, v3, 8, "BFu9s_BFu33_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_L, BFu9s_BFu33_L)
//============================================================================


struct  BFu9s_BFu33_S  {
  unsigned short v1:9;
  __tsu64 v2:33;
  short v3;
};
//SIG(1 BFu9s_BFu33_S) C1{ Fs:9 FL:33 Fs}



static void Test_BFu9s_BFu33_S()
{
  {
    init_simple_test("BFu9s_BFu33_S");
    static STRUCT_IF_C BFu9s_BFu33_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_S");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_S");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_S");
    check_field_offset(lv, v3, 6, "BFu9s_BFu33_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_S, BFu9s_BFu33_S)
//============================================================================


struct  BFu9s_BFu33_Uc  {
  unsigned short v1:9;
  __tsu64 v2:33;
  unsigned char v3;
};
//SIG(1 BFu9s_BFu33_Uc) C1{ Fs:9 FL:33 Fc}



static void Test_BFu9s_BFu33_Uc()
{
  {
    init_simple_test("BFu9s_BFu33_Uc");
    static STRUCT_IF_C BFu9s_BFu33_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_Uc");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_Uc");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_Uc");
    check_field_offset(lv, v3, 6, "BFu9s_BFu33_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_Uc, BFu9s_BFu33_Uc)
//============================================================================


struct  BFu9s_BFu33_Ui  {
  unsigned short v1:9;
  __tsu64 v2:33;
  unsigned int v3;
};
//SIG(1 BFu9s_BFu33_Ui) C1{ Fs:9 FL:33 Fi}



static void Test_BFu9s_BFu33_Ui()
{
  {
    init_simple_test("BFu9s_BFu33_Ui");
    static STRUCT_IF_C BFu9s_BFu33_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu33_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_Ui");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_Ui");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_Ui");
    check_field_offset(lv, v3, 8, "BFu9s_BFu33_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_Ui, BFu9s_BFu33_Ui)
//============================================================================


struct  BFu9s_BFu33_Ul  {
  unsigned short v1:9;
  __tsu64 v2:33;
  __tsu64 v3;
};
//SIG(1 BFu9s_BFu33_Ul) C1{ Fs:9 FL:33 FL}



static void Test_BFu9s_BFu33_Ul()
{
  {
    init_simple_test("BFu9s_BFu33_Ul");
    static STRUCT_IF_C BFu9s_BFu33_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu9s_BFu33_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_Ul");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_Ul");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_Ul");
    check_field_offset(lv, v3, 8, "BFu9s_BFu33_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_Ul, BFu9s_BFu33_Ul)
//============================================================================


struct  BFu9s_BFu33_Us  {
  unsigned short v1:9;
  __tsu64 v2:33;
  unsigned short v3;
};
//SIG(1 BFu9s_BFu33_Us) C1{ Fs:9 FL:33 Fs}



static void Test_BFu9s_BFu33_Us()
{
  {
    init_simple_test("BFu9s_BFu33_Us");
    static STRUCT_IF_C BFu9s_BFu33_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_Us");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_Us");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_Us");
    check_field_offset(lv, v3, 6, "BFu9s_BFu33_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_Us, BFu9s_BFu33_Us)
//============================================================================


struct  BFu9s_BFu33_Vp  {
  unsigned short v1:9;
  __tsu64 v2:33;
  void *v3;
};
//SIG(1 BFu9s_BFu33_Vp) C1{ Fs:9 FL:33 Fp}



static void Test_BFu9s_BFu33_Vp()
{
  {
    init_simple_test("BFu9s_BFu33_Vp");
    static STRUCT_IF_C BFu9s_BFu33_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu33_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_Vp");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_Vp");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_Vp");
    check_field_offset(lv, v3, 8, "BFu9s_BFu33_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_Vp, BFu9s_BFu33_Vp)
//============================================================================


struct  BFu9s_BFu7c  {
  unsigned short v1:9;
  unsigned char v2:7;
};
//SIG(1 BFu9s_BFu7c) C1{ Fs:9 Fc:7}



static void Test_BFu9s_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu7c");
    static STRUCT_IF_C BFu9s_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(BFu9s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c, BFu9s_BFu7c)
//============================================================================


struct  BFu9s_BFu7c_BFu15i  {
  unsigned short v1:9;
  unsigned char v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu9s_BFu7c_BFu15i) C1{ Fs:9 Fc:7 Fi:15}



static void Test_BFu9s_BFu7c_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu15i");
    static STRUCT_IF_C BFu9s_BFu7c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu9s_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu7c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu15i, BFu9s_BFu7c_BFu15i)
//============================================================================


struct  BFu9s_BFu7c_BFu15ll  {
  unsigned short v1:9;
  unsigned char v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_BFu7c_BFu15ll) C1{ Fs:9 Fc:7 FL:15}



static void Test_BFu9s_BFu7c_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu7c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu9s_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu7c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu15ll, BFu9s_BFu7c_BFu15ll)
//============================================================================


struct  BFu9s_BFu7c_BFu15s  {
  unsigned short v1:9;
  unsigned char v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu9s_BFu7c_BFu15s) C1{ Fs:9 Fc:7 Fs:15}



static void Test_BFu9s_BFu7c_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu15s");
    static STRUCT_IF_C BFu9s_BFu7c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu9s_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu7c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu15s, BFu9s_BFu7c_BFu15s)
//============================================================================


struct  BFu9s_BFu7c_BFu16i  {
  unsigned short v1:9;
  unsigned char v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu9s_BFu7c_BFu16i) C1{ Fs:9 Fc:7 Fi:16}



static void Test_BFu9s_BFu7c_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu16i");
    static STRUCT_IF_C BFu9s_BFu7c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu9s_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu7c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu16i, BFu9s_BFu7c_BFu16i)
//============================================================================


struct  BFu9s_BFu7c_BFu16ll  {
  unsigned short v1:9;
  unsigned char v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_BFu7c_BFu16ll) C1{ Fs:9 Fc:7 FL:16}



static void Test_BFu9s_BFu7c_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu7c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu9s_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu7c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu16ll, BFu9s_BFu7c_BFu16ll)
//============================================================================


struct  BFu9s_BFu7c_BFu16s  {
  unsigned short v1:9;
  unsigned char v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu9s_BFu7c_BFu16s) C1{ Fs:9 Fc:7 Fs:16}



static void Test_BFu9s_BFu7c_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu16s");
    static STRUCT_IF_C BFu9s_BFu7c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu9s_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu7c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu16s, BFu9s_BFu7c_BFu16s)
//============================================================================


struct  BFu9s_BFu7c_BFu17i  {
  unsigned short v1:9;
  unsigned char v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu9s_BFu7c_BFu17i) C1{ Fs:9 Fc:7 Fi:17}



static void Test_BFu9s_BFu7c_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu17i");
    static STRUCT_IF_C BFu9s_BFu7c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu9s_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu7c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu17i, BFu9s_BFu7c_BFu17i)
//============================================================================


struct  BFu9s_BFu7c_BFu17ll  {
  unsigned short v1:9;
  unsigned char v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_BFu7c_BFu17ll) C1{ Fs:9 Fc:7 FL:17}



static void Test_BFu9s_BFu7c_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu7c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu9s_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu7c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu17ll, BFu9s_BFu7c_BFu17ll)
//============================================================================


struct  BFu9s_BFu7c_BFu1c  {
  unsigned short v1:9;
  unsigned char v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu9s_BFu7c_BFu1c) C1{ Fs:9 Fc:7 Fc:1}



static void Test_BFu9s_BFu7c_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu1c");
    static STRUCT_IF_C BFu9s_BFu7c_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7c_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu9s_BFu7c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu1c, BFu9s_BFu7c_BFu1c)
//============================================================================


struct  BFu9s_BFu7c_BFu1i  {
  unsigned short v1:9;
  unsigned char v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu9s_BFu7c_BFu1i) C1{ Fs:9 Fc:7 Fi:1}



static void Test_BFu9s_BFu7c_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu1i");
    static STRUCT_IF_C BFu9s_BFu7c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu9s_BFu7c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu1i, BFu9s_BFu7c_BFu1i)
//============================================================================


struct  BFu9s_BFu7c_BFu1ll  {
  unsigned short v1:9;
  unsigned char v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_BFu7c_BFu1ll) C1{ Fs:9 Fc:7 FL:1}



static void Test_BFu9s_BFu7c_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu7c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu9s_BFu7c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu1ll, BFu9s_BFu7c_BFu1ll)
//============================================================================


struct  BFu9s_BFu7c_BFu1s  {
  unsigned short v1:9;
  unsigned char v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu9s_BFu7c_BFu1s) C1{ Fs:9 Fc:7 Fs:1}



static void Test_BFu9s_BFu7c_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu1s");
    static STRUCT_IF_C BFu9s_BFu7c_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu9s_BFu7c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu1s, BFu9s_BFu7c_BFu1s)
//============================================================================


struct  BFu9s_BFu7c_BFu31i  {
  unsigned short v1:9;
  unsigned char v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu9s_BFu7c_BFu31i) C1{ Fs:9 Fc:7 Fi:31}



static void Test_BFu9s_BFu7c_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu31i");
    static STRUCT_IF_C BFu9s_BFu7c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu7c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu31i, BFu9s_BFu7c_BFu31i)
//============================================================================


struct  BFu9s_BFu7c_BFu31ll  {
  unsigned short v1:9;
  unsigned char v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_BFu7c_BFu31ll) C1{ Fs:9 Fc:7 FL:31}



static void Test_BFu9s_BFu7c_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu7c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu9s_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu7c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu31ll, BFu9s_BFu7c_BFu31ll)
//============================================================================


struct  BFu9s_BFu7c_BFu32i  {
  unsigned short v1:9;
  unsigned char v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu9s_BFu7c_BFu32i) C1{ Fs:9 Fc:7 Fi:32}



static void Test_BFu9s_BFu7c_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu32i");
    static STRUCT_IF_C BFu9s_BFu7c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu7c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu32i, BFu9s_BFu7c_BFu32i)
//============================================================================


struct  BFu9s_BFu7c_BFu32ll  {
  unsigned short v1:9;
  unsigned char v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_BFu7c_BFu32ll) C1{ Fs:9 Fc:7 FL:32}



static void Test_BFu9s_BFu7c_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu7c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu9s_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu7c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu32ll, BFu9s_BFu7c_BFu32ll)
//============================================================================


struct  BFu9s_BFu7c_BFu33  {
  unsigned short v1:9;
  unsigned char v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_BFu7c_BFu33) C1{ Fs:9 Fc:7 FL:33}



static void Test_BFu9s_BFu7c_BFu33()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu33");
    static STRUCT_IF_C BFu9s_BFu7c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu9s_BFu7c_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu9s_BFu7c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu33, BFu9s_BFu7c_BFu33)
//============================================================================


struct  BFu9s_BFu7c_BFu7c  {
  unsigned short v1:9;
  unsigned char v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu9s_BFu7c_BFu7c) C1{ Fs:9 Fc:7 Fc:7}



static void Test_BFu9s_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu7c");
    static STRUCT_IF_C BFu9s_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu9s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu7c, BFu9s_BFu7c_BFu7c)
//============================================================================


struct  BFu9s_BFu7c_BFu7i  {
  unsigned short v1:9;
  unsigned char v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu9s_BFu7c_BFu7i) C1{ Fs:9 Fc:7 Fi:7}



static void Test_BFu9s_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu7i");
    static STRUCT_IF_C BFu9s_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu9s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu7i, BFu9s_BFu7c_BFu7i)
//============================================================================


struct  BFu9s_BFu7c_BFu7ll  {
  unsigned short v1:9;
  unsigned char v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_BFu7c_BFu7ll) C1{ Fs:9 Fc:7 FL:7}



static void Test_BFu9s_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu9s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu7ll, BFu9s_BFu7c_BFu7ll)
//============================================================================


struct  BFu9s_BFu7c_BFu7s  {
  unsigned short v1:9;
  unsigned char v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu9s_BFu7c_BFu7s) C1{ Fs:9 Fc:7 Fs:7}



static void Test_BFu9s_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu7s");
    static STRUCT_IF_C BFu9s_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu9s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu7s, BFu9s_BFu7c_BFu7s)
//============================================================================


struct  BFu9s_BFu7c_BFu8c  {
  unsigned short v1:9;
  unsigned char v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu9s_BFu7c_BFu8c) C1{ Fs:9 Fc:7 Fc:8}



static void Test_BFu9s_BFu7c_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu8c");
    static STRUCT_IF_C BFu9s_BFu7c_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7c_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu9s_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu7c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu8c, BFu9s_BFu7c_BFu8c)
//============================================================================


struct  BFu9s_BFu7c_BFu8i  {
  unsigned short v1:9;
  unsigned char v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu9s_BFu7c_BFu8i) C1{ Fs:9 Fc:7 Fi:8}



static void Test_BFu9s_BFu7c_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu8i");
    static STRUCT_IF_C BFu9s_BFu7c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu9s_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu7c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu8i, BFu9s_BFu7c_BFu8i)
//============================================================================


struct  BFu9s_BFu7c_BFu8ll  {
  unsigned short v1:9;
  unsigned char v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_BFu7c_BFu8ll) C1{ Fs:9 Fc:7 FL:8}



static void Test_BFu9s_BFu7c_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu7c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu9s_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu7c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu8ll, BFu9s_BFu7c_BFu8ll)
//============================================================================


struct  BFu9s_BFu7c_BFu8s  {
  unsigned short v1:9;
  unsigned char v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu9s_BFu7c_BFu8s) C1{ Fs:9 Fc:7 Fs:8}



static void Test_BFu9s_BFu7c_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu8s");
    static STRUCT_IF_C BFu9s_BFu7c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu9s_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu7c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu8s, BFu9s_BFu7c_BFu8s)
//============================================================================


struct  BFu9s_BFu7c_BFu9i  {
  unsigned short v1:9;
  unsigned char v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFu7c_BFu9i) C1{ Fs:9 Fc:7 Fi:9}



static void Test_BFu9s_BFu7c_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu9i");
    static STRUCT_IF_C BFu9s_BFu7c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu9s_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu9i, BFu9s_BFu7c_BFu9i)
//============================================================================


struct  BFu9s_BFu7c_BFu9ll  {
  unsigned short v1:9;
  unsigned char v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFu7c_BFu9ll) C1{ Fs:9 Fc:7 FL:9}



static void Test_BFu9s_BFu7c_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu7c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu9s_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu9ll, BFu9s_BFu7c_BFu9ll)
//============================================================================


struct  BFu9s_BFu7c_BFu9s  {
  unsigned short v1:9;
  unsigned char v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFu7c_BFu9s) C1{ Fs:9 Fc:7 Fs:9}



static void Test_BFu9s_BFu7c_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu9s");
    static STRUCT_IF_C BFu9s_BFu7c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu9s_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu9s, BFu9s_BFu7c_BFu9s)
//============================================================================


struct  BFu9s_BFu7c_C  {
  unsigned short v1:9;
  unsigned char v2:7;
  char v3;
};
//SIG(1 BFu9s_BFu7c_C) C1{ Fs:9 Fc:7 Fc}



static void Test_BFu9s_BFu7c_C()
{
  {
    init_simple_test("BFu9s_BFu7c_C");
    static STRUCT_IF_C BFu9s_BFu7c_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7c_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7c_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_C");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_C");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_C");
    check_field_offset(lv, v3, 2, "BFu9s_BFu7c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_C, BFu9s_BFu7c_C)
//============================================================================


struct  BFu9s_BFu7c_D  {
  unsigned short v1:9;
  unsigned char v2:7;
  double v3;
};
//SIG(1 BFu9s_BFu7c_D) C1{ Fs:9 Fc:7 FL}



static void Test_BFu9s_BFu7c_D()
{
  {
    init_simple_test("BFu9s_BFu7c_D");
    static STRUCT_IF_C BFu9s_BFu7c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu7c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7c_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_D");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_D");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu7c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_D, BFu9s_BFu7c_D)
//============================================================================


struct  BFu9s_BFu7c_F  {
  unsigned short v1:9;
  unsigned char v2:7;
  float v3;
};
//SIG(1 BFu9s_BFu7c_F) C1{ Fs:9 Fc:7 Fi}



static void Test_BFu9s_BFu7c_F()
{
  {
    init_simple_test("BFu9s_BFu7c_F");
    static STRUCT_IF_C BFu9s_BFu7c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7c_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_F");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_F");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_F");
    check_field_offset(lv, v3, 4, "BFu9s_BFu7c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_F, BFu9s_BFu7c_F)
//============================================================================


struct  BFu9s_BFu7c_I  {
  unsigned short v1:9;
  unsigned char v2:7;
  int v3;
};
//SIG(1 BFu9s_BFu7c_I) C1{ Fs:9 Fc:7 Fi}



static void Test_BFu9s_BFu7c_I()
{
  {
    init_simple_test("BFu9s_BFu7c_I");
    static STRUCT_IF_C BFu9s_BFu7c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7c_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_I");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_I");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_I");
    check_field_offset(lv, v3, 4, "BFu9s_BFu7c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_I, BFu9s_BFu7c_I)
//============================================================================


struct  BFu9s_BFu7c_Ip  {
  unsigned short v1:9;
  unsigned char v2:7;
  int *v3;
};
//SIG(1 BFu9s_BFu7c_Ip) C1{ Fs:9 Fc:7 Fp}



static void Test_BFu9s_BFu7c_Ip()
{
  {
    init_simple_test("BFu9s_BFu7c_Ip");
    static STRUCT_IF_C BFu9s_BFu7c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu7c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_Ip");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_Ip");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu7c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_Ip, BFu9s_BFu7c_Ip)
//============================================================================


struct  BFu9s_BFu7c_L  {
  unsigned short v1:9;
  unsigned char v2:7;
  __tsi64 v3;
};
//SIG(1 BFu9s_BFu7c_L) C1{ Fs:9 Fc:7 FL}



static void Test_BFu9s_BFu7c_L()
{
  {
    init_simple_test("BFu9s_BFu7c_L");
    static STRUCT_IF_C BFu9s_BFu7c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu7c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7c_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_L");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_L");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu7c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_L, BFu9s_BFu7c_L)
//============================================================================


struct  BFu9s_BFu7c_S  {
  unsigned short v1:9;
  unsigned char v2:7;
  short v3;
};
//SIG(1 BFu9s_BFu7c_S) C1{ Fs:9 Fc:7 Fs}



static void Test_BFu9s_BFu7c_S()
{
  {
    init_simple_test("BFu9s_BFu7c_S");
    static STRUCT_IF_C BFu9s_BFu7c_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7c_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7c_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_S");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_S");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_S");
    check_field_offset(lv, v3, 2, "BFu9s_BFu7c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_S, BFu9s_BFu7c_S)
//============================================================================


struct  BFu9s_BFu7c_Uc  {
  unsigned short v1:9;
  unsigned char v2:7;
  unsigned char v3;
};
//SIG(1 BFu9s_BFu7c_Uc) C1{ Fs:9 Fc:7 Fc}



static void Test_BFu9s_BFu7c_Uc()
{
  {
    init_simple_test("BFu9s_BFu7c_Uc");
    static STRUCT_IF_C BFu9s_BFu7c_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7c_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_Uc");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_Uc");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_Uc");
    check_field_offset(lv, v3, 2, "BFu9s_BFu7c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_Uc, BFu9s_BFu7c_Uc)
//============================================================================


struct  BFu9s_BFu7c_Ui  {
  unsigned short v1:9;
  unsigned char v2:7;
  unsigned int v3;
};
//SIG(1 BFu9s_BFu7c_Ui) C1{ Fs:9 Fc:7 Fi}



static void Test_BFu9s_BFu7c_Ui()
{
  {
    init_simple_test("BFu9s_BFu7c_Ui");
    static STRUCT_IF_C BFu9s_BFu7c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_Ui");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_Ui");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_Ui");
    check_field_offset(lv, v3, 4, "BFu9s_BFu7c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_Ui, BFu9s_BFu7c_Ui)
//============================================================================


struct  BFu9s_BFu7c_Ul  {
  unsigned short v1:9;
  unsigned char v2:7;
  __tsu64 v3;
};
//SIG(1 BFu9s_BFu7c_Ul) C1{ Fs:9 Fc:7 FL}



static void Test_BFu9s_BFu7c_Ul()
{
  {
    init_simple_test("BFu9s_BFu7c_Ul");
    static STRUCT_IF_C BFu9s_BFu7c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu7c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_Ul");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_Ul");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu7c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_Ul, BFu9s_BFu7c_Ul)
//============================================================================


struct  BFu9s_BFu7c_Us  {
  unsigned short v1:9;
  unsigned char v2:7;
  unsigned short v3;
};
//SIG(1 BFu9s_BFu7c_Us) C1{ Fs:9 Fc:7 Fs}



static void Test_BFu9s_BFu7c_Us()
{
  {
    init_simple_test("BFu9s_BFu7c_Us");
    static STRUCT_IF_C BFu9s_BFu7c_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_Us");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_Us");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_Us");
    check_field_offset(lv, v3, 2, "BFu9s_BFu7c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_Us, BFu9s_BFu7c_Us)
//============================================================================


struct  BFu9s_BFu7c_Vp  {
  unsigned short v1:9;
  unsigned char v2:7;
  void *v3;
};
//SIG(1 BFu9s_BFu7c_Vp) C1{ Fs:9 Fc:7 Fp}



static void Test_BFu9s_BFu7c_Vp()
{
  {
    init_simple_test("BFu9s_BFu7c_Vp");
    static STRUCT_IF_C BFu9s_BFu7c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu7c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_Vp");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_Vp");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu7c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_Vp, BFu9s_BFu7c_Vp)
//============================================================================


struct  BFu9s_BFu7i  {
  unsigned short v1:9;
  unsigned int v2:7;
};
//SIG(1 BFu9s_BFu7i) C1{ Fs:9 Fi:7}



static void Test_BFu9s_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu7i");
    static STRUCT_IF_C BFu9s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i, BFu9s_BFu7i)
//============================================================================


struct  BFu9s_BFu7i_BFu15i  {
  unsigned short v1:9;
  unsigned int v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu9s_BFu7i_BFu15i) C1{ Fs:9 Fi:7 Fi:15}



static void Test_BFu9s_BFu7i_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu15i");
    static STRUCT_IF_C BFu9s_BFu7i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu9s_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu7i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu15i, BFu9s_BFu7i_BFu15i)
//============================================================================


struct  BFu9s_BFu7i_BFu15ll  {
  unsigned short v1:9;
  unsigned int v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_BFu7i_BFu15ll) C1{ Fs:9 Fi:7 FL:15}



static void Test_BFu9s_BFu7i_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu7i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu9s_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu7i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu15ll, BFu9s_BFu7i_BFu15ll)
//============================================================================


struct  BFu9s_BFu7i_BFu15s  {
  unsigned short v1:9;
  unsigned int v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu9s_BFu7i_BFu15s) C1{ Fs:9 Fi:7 Fs:15}



static void Test_BFu9s_BFu7i_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu15s");
    static STRUCT_IF_C BFu9s_BFu7i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu9s_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu7i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu15s, BFu9s_BFu7i_BFu15s)
//============================================================================


struct  BFu9s_BFu7i_BFu16i  {
  unsigned short v1:9;
  unsigned int v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu9s_BFu7i_BFu16i) C1{ Fs:9 Fi:7 Fi:16}



static void Test_BFu9s_BFu7i_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu16i");
    static STRUCT_IF_C BFu9s_BFu7i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu9s_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu7i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu16i, BFu9s_BFu7i_BFu16i)
//============================================================================


struct  BFu9s_BFu7i_BFu16ll  {
  unsigned short v1:9;
  unsigned int v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_BFu7i_BFu16ll) C1{ Fs:9 Fi:7 FL:16}



static void Test_BFu9s_BFu7i_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu7i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu9s_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu7i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu16ll, BFu9s_BFu7i_BFu16ll)
//============================================================================


struct  BFu9s_BFu7i_BFu16s  {
  unsigned short v1:9;
  unsigned int v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu9s_BFu7i_BFu16s) C1{ Fs:9 Fi:7 Fs:16}



static void Test_BFu9s_BFu7i_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu16s");
    static STRUCT_IF_C BFu9s_BFu7i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu9s_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu7i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu16s, BFu9s_BFu7i_BFu16s)
//============================================================================


struct  BFu9s_BFu7i_BFu17i  {
  unsigned short v1:9;
  unsigned int v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu9s_BFu7i_BFu17i) C1{ Fs:9 Fi:7 Fi:17}



static void Test_BFu9s_BFu7i_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu17i");
    static STRUCT_IF_C BFu9s_BFu7i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu9s_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu7i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu17i, BFu9s_BFu7i_BFu17i)
//============================================================================


struct  BFu9s_BFu7i_BFu17ll  {
  unsigned short v1:9;
  unsigned int v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_BFu7i_BFu17ll) C1{ Fs:9 Fi:7 FL:17}



static void Test_BFu9s_BFu7i_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu7i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu9s_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu7i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu17ll, BFu9s_BFu7i_BFu17ll)
//============================================================================


struct  BFu9s_BFu7i_BFu1c  {
  unsigned short v1:9;
  unsigned int v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu9s_BFu7i_BFu1c) C1{ Fs:9 Fi:7 Fc:1}



static void Test_BFu9s_BFu7i_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu1c");
    static STRUCT_IF_C BFu9s_BFu7i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu9s_BFu7i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu1c, BFu9s_BFu7i_BFu1c)
//============================================================================


struct  BFu9s_BFu7i_BFu1i  {
  unsigned short v1:9;
  unsigned int v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu9s_BFu7i_BFu1i) C1{ Fs:9 Fi:7 Fi:1}



static void Test_BFu9s_BFu7i_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu1i");
    static STRUCT_IF_C BFu9s_BFu7i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu9s_BFu7i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu1i, BFu9s_BFu7i_BFu1i)
//============================================================================


struct  BFu9s_BFu7i_BFu1ll  {
  unsigned short v1:9;
  unsigned int v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_BFu7i_BFu1ll) C1{ Fs:9 Fi:7 FL:1}



static void Test_BFu9s_BFu7i_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu7i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu9s_BFu7i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu1ll, BFu9s_BFu7i_BFu1ll)
//============================================================================


struct  BFu9s_BFu7i_BFu1s  {
  unsigned short v1:9;
  unsigned int v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu9s_BFu7i_BFu1s) C1{ Fs:9 Fi:7 Fs:1}



static void Test_BFu9s_BFu7i_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu1s");
    static STRUCT_IF_C BFu9s_BFu7i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu9s_BFu7i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu1s, BFu9s_BFu7i_BFu1s)
//============================================================================


struct  BFu9s_BFu7i_BFu31i  {
  unsigned short v1:9;
  unsigned int v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu9s_BFu7i_BFu31i) C1{ Fs:9 Fi:7 Fi:31}



static void Test_BFu9s_BFu7i_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu31i");
    static STRUCT_IF_C BFu9s_BFu7i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_BFu7i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu7i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu31i, BFu9s_BFu7i_BFu31i)
//============================================================================


struct  BFu9s_BFu7i_BFu31ll  {
  unsigned short v1:9;
  unsigned int v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_BFu7i_BFu31ll) C1{ Fs:9 Fi:7 FL:31}



static void Test_BFu9s_BFu7i_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu7i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu9s_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu7i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu31ll, BFu9s_BFu7i_BFu31ll)
//============================================================================


struct  BFu9s_BFu7i_BFu32i  {
  unsigned short v1:9;
  unsigned int v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu9s_BFu7i_BFu32i) C1{ Fs:9 Fi:7 Fi:32}



static void Test_BFu9s_BFu7i_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu32i");
    static STRUCT_IF_C BFu9s_BFu7i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_BFu7i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu7i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu32i, BFu9s_BFu7i_BFu32i)
//============================================================================


struct  BFu9s_BFu7i_BFu32ll  {
  unsigned short v1:9;
  unsigned int v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_BFu7i_BFu32ll) C1{ Fs:9 Fi:7 FL:32}



static void Test_BFu9s_BFu7i_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu7i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu9s_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu7i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu32ll, BFu9s_BFu7i_BFu32ll)
//============================================================================


struct  BFu9s_BFu7i_BFu33  {
  unsigned short v1:9;
  unsigned int v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_BFu7i_BFu33) C1{ Fs:9 Fi:7 FL:33}



static void Test_BFu9s_BFu7i_BFu33()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu33");
    static STRUCT_IF_C BFu9s_BFu7i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu9s_BFu7i_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu9s_BFu7i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu33, BFu9s_BFu7i_BFu33)
//============================================================================


struct  BFu9s_BFu7i_BFu7c  {
  unsigned short v1:9;
  unsigned int v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu9s_BFu7i_BFu7c) C1{ Fs:9 Fi:7 Fc:7}



static void Test_BFu9s_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu7c");
    static STRUCT_IF_C BFu9s_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu9s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu7c, BFu9s_BFu7i_BFu7c)
//============================================================================


struct  BFu9s_BFu7i_BFu7i  {
  unsigned short v1:9;
  unsigned int v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu9s_BFu7i_BFu7i) C1{ Fs:9 Fi:7 Fi:7}



static void Test_BFu9s_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu7i");
    static STRUCT_IF_C BFu9s_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu9s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu7i, BFu9s_BFu7i_BFu7i)
//============================================================================


struct  BFu9s_BFu7i_BFu7ll  {
  unsigned short v1:9;
  unsigned int v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_BFu7i_BFu7ll) C1{ Fs:9 Fi:7 FL:7}



static void Test_BFu9s_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu9s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu7ll, BFu9s_BFu7i_BFu7ll)
//============================================================================


struct  BFu9s_BFu7i_BFu7s  {
  unsigned short v1:9;
  unsigned int v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu9s_BFu7i_BFu7s) C1{ Fs:9 Fi:7 Fs:7}



static void Test_BFu9s_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu7s");
    static STRUCT_IF_C BFu9s_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu9s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu7s, BFu9s_BFu7i_BFu7s)
//============================================================================


struct  BFu9s_BFu7i_BFu8c  {
  unsigned short v1:9;
  unsigned int v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu9s_BFu7i_BFu8c) C1{ Fs:9 Fi:7 Fc:8}



static void Test_BFu9s_BFu7i_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu8c");
    static STRUCT_IF_C BFu9s_BFu7i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu9s_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu7i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu8c, BFu9s_BFu7i_BFu8c)
//============================================================================


struct  BFu9s_BFu7i_BFu8i  {
  unsigned short v1:9;
  unsigned int v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu9s_BFu7i_BFu8i) C1{ Fs:9 Fi:7 Fi:8}



static void Test_BFu9s_BFu7i_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu8i");
    static STRUCT_IF_C BFu9s_BFu7i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu9s_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu7i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu8i, BFu9s_BFu7i_BFu8i)
//============================================================================


struct  BFu9s_BFu7i_BFu8ll  {
  unsigned short v1:9;
  unsigned int v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_BFu7i_BFu8ll) C1{ Fs:9 Fi:7 FL:8}



static void Test_BFu9s_BFu7i_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu7i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu9s_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu7i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu8ll, BFu9s_BFu7i_BFu8ll)
//============================================================================


struct  BFu9s_BFu7i_BFu8s  {
  unsigned short v1:9;
  unsigned int v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu9s_BFu7i_BFu8s) C1{ Fs:9 Fi:7 Fs:8}



static void Test_BFu9s_BFu7i_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu8s");
    static STRUCT_IF_C BFu9s_BFu7i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu9s_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu7i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu8s, BFu9s_BFu7i_BFu8s)
//============================================================================


struct  BFu9s_BFu7i_BFu9i  {
  unsigned short v1:9;
  unsigned int v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFu7i_BFu9i) C1{ Fs:9 Fi:7 Fi:9}



static void Test_BFu9s_BFu7i_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu9i");
    static STRUCT_IF_C BFu9s_BFu7i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu9s_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu9i, BFu9s_BFu7i_BFu9i)
//============================================================================


struct  BFu9s_BFu7i_BFu9ll  {
  unsigned short v1:9;
  unsigned int v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFu7i_BFu9ll) C1{ Fs:9 Fi:7 FL:9}



static void Test_BFu9s_BFu7i_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu7i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu9s_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu9ll, BFu9s_BFu7i_BFu9ll)
//============================================================================


struct  BFu9s_BFu7i_BFu9s  {
  unsigned short v1:9;
  unsigned int v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFu7i_BFu9s) C1{ Fs:9 Fi:7 Fs:9}



static void Test_BFu9s_BFu7i_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu9s");
    static STRUCT_IF_C BFu9s_BFu7i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu9s_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu9s, BFu9s_BFu7i_BFu9s)
//============================================================================


struct  BFu9s_BFu7i_C  {
  unsigned short v1:9;
  unsigned int v2:7;
  char v3;
};
//SIG(1 BFu9s_BFu7i_C) C1{ Fs:9 Fi:7 Fc}



static void Test_BFu9s_BFu7i_C()
{
  {
    init_simple_test("BFu9s_BFu7i_C");
    static STRUCT_IF_C BFu9s_BFu7i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_C");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_C");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_C");
    check_field_offset(lv, v3, 2, "BFu9s_BFu7i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_C, BFu9s_BFu7i_C)
//============================================================================


struct  BFu9s_BFu7i_D  {
  unsigned short v1:9;
  unsigned int v2:7;
  double v3;
};
//SIG(1 BFu9s_BFu7i_D) C1{ Fs:9 Fi:7 FL}



static void Test_BFu9s_BFu7i_D()
{
  {
    init_simple_test("BFu9s_BFu7i_D");
    static STRUCT_IF_C BFu9s_BFu7i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu7i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7i_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_D");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_D");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu7i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_D, BFu9s_BFu7i_D)
//============================================================================


struct  BFu9s_BFu7i_F  {
  unsigned short v1:9;
  unsigned int v2:7;
  float v3;
};
//SIG(1 BFu9s_BFu7i_F) C1{ Fs:9 Fi:7 Fi}



static void Test_BFu9s_BFu7i_F()
{
  {
    init_simple_test("BFu9s_BFu7i_F");
    static STRUCT_IF_C BFu9s_BFu7i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_F");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_F");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_F");
    check_field_offset(lv, v3, 4, "BFu9s_BFu7i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_F, BFu9s_BFu7i_F)
//============================================================================


struct  BFu9s_BFu7i_I  {
  unsigned short v1:9;
  unsigned int v2:7;
  int v3;
};
//SIG(1 BFu9s_BFu7i_I) C1{ Fs:9 Fi:7 Fi}



static void Test_BFu9s_BFu7i_I()
{
  {
    init_simple_test("BFu9s_BFu7i_I");
    static STRUCT_IF_C BFu9s_BFu7i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_I");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_I");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_I");
    check_field_offset(lv, v3, 4, "BFu9s_BFu7i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_I, BFu9s_BFu7i_I)
//============================================================================


struct  BFu9s_BFu7i_Ip  {
  unsigned short v1:9;
  unsigned int v2:7;
  int *v3;
};
//SIG(1 BFu9s_BFu7i_Ip) C1{ Fs:9 Fi:7 Fp}



static void Test_BFu9s_BFu7i_Ip()
{
  {
    init_simple_test("BFu9s_BFu7i_Ip");
    static STRUCT_IF_C BFu9s_BFu7i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu7i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_Ip");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_Ip");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu7i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_Ip, BFu9s_BFu7i_Ip)
//============================================================================


struct  BFu9s_BFu7i_L  {
  unsigned short v1:9;
  unsigned int v2:7;
  __tsi64 v3;
};
//SIG(1 BFu9s_BFu7i_L) C1{ Fs:9 Fi:7 FL}



static void Test_BFu9s_BFu7i_L()
{
  {
    init_simple_test("BFu9s_BFu7i_L");
    static STRUCT_IF_C BFu9s_BFu7i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu7i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7i_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_L");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_L");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu7i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_L, BFu9s_BFu7i_L)
//============================================================================


struct  BFu9s_BFu7i_S  {
  unsigned short v1:9;
  unsigned int v2:7;
  short v3;
};
//SIG(1 BFu9s_BFu7i_S) C1{ Fs:9 Fi:7 Fs}



static void Test_BFu9s_BFu7i_S()
{
  {
    init_simple_test("BFu9s_BFu7i_S");
    static STRUCT_IF_C BFu9s_BFu7i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_S");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_S");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_S");
    check_field_offset(lv, v3, 2, "BFu9s_BFu7i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_S, BFu9s_BFu7i_S)
//============================================================================


struct  BFu9s_BFu7i_Uc  {
  unsigned short v1:9;
  unsigned int v2:7;
  unsigned char v3;
};
//SIG(1 BFu9s_BFu7i_Uc) C1{ Fs:9 Fi:7 Fc}



static void Test_BFu9s_BFu7i_Uc()
{
  {
    init_simple_test("BFu9s_BFu7i_Uc");
    static STRUCT_IF_C BFu9s_BFu7i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_Uc");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_Uc");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_Uc");
    check_field_offset(lv, v3, 2, "BFu9s_BFu7i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_Uc, BFu9s_BFu7i_Uc)
//============================================================================


struct  BFu9s_BFu7i_Ui  {
  unsigned short v1:9;
  unsigned int v2:7;
  unsigned int v3;
};
//SIG(1 BFu9s_BFu7i_Ui) C1{ Fs:9 Fi:7 Fi}



static void Test_BFu9s_BFu7i_Ui()
{
  {
    init_simple_test("BFu9s_BFu7i_Ui");
    static STRUCT_IF_C BFu9s_BFu7i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_Ui");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_Ui");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_Ui");
    check_field_offset(lv, v3, 4, "BFu9s_BFu7i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_Ui, BFu9s_BFu7i_Ui)
//============================================================================


struct  BFu9s_BFu7i_Ul  {
  unsigned short v1:9;
  unsigned int v2:7;
  __tsu64 v3;
};
//SIG(1 BFu9s_BFu7i_Ul) C1{ Fs:9 Fi:7 FL}



static void Test_BFu9s_BFu7i_Ul()
{
  {
    init_simple_test("BFu9s_BFu7i_Ul");
    static STRUCT_IF_C BFu9s_BFu7i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu7i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_Ul");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_Ul");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu7i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_Ul, BFu9s_BFu7i_Ul)
//============================================================================


struct  BFu9s_BFu7i_Us  {
  unsigned short v1:9;
  unsigned int v2:7;
  unsigned short v3;
};
//SIG(1 BFu9s_BFu7i_Us) C1{ Fs:9 Fi:7 Fs}



static void Test_BFu9s_BFu7i_Us()
{
  {
    init_simple_test("BFu9s_BFu7i_Us");
    static STRUCT_IF_C BFu9s_BFu7i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_Us");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_Us");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_Us");
    check_field_offset(lv, v3, 2, "BFu9s_BFu7i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_Us, BFu9s_BFu7i_Us)
//============================================================================


struct  BFu9s_BFu7i_Vp  {
  unsigned short v1:9;
  unsigned int v2:7;
  void *v3;
};
//SIG(1 BFu9s_BFu7i_Vp) C1{ Fs:9 Fi:7 Fp}



static void Test_BFu9s_BFu7i_Vp()
{
  {
    init_simple_test("BFu9s_BFu7i_Vp");
    static STRUCT_IF_C BFu9s_BFu7i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu7i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_Vp");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_Vp");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu7i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_Vp, BFu9s_BFu7i_Vp)
//============================================================================


struct  BFu9s_BFu7ll  {
  unsigned short v1:9;
  __tsu64 v2:7;
};
//SIG(1 BFu9s_BFu7ll) C1{ Fs:9 FL:7}



static void Test_BFu9s_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll, BFu9s_BFu7ll)
//============================================================================


struct  BFu9s_BFu7ll_BFu15i  {
  unsigned short v1:9;
  __tsu64 v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu9s_BFu7ll_BFu15i) C1{ Fs:9 FL:7 Fi:15}



static void Test_BFu9s_BFu7ll_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu15i");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu9s_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu7ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu15i, BFu9s_BFu7ll_BFu15i)
//============================================================================


struct  BFu9s_BFu7ll_BFu15ll  {
  unsigned short v1:9;
  __tsu64 v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_BFu7ll_BFu15ll) C1{ Fs:9 FL:7 FL:15}



static void Test_BFu9s_BFu7ll_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu9s_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu7ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu15ll, BFu9s_BFu7ll_BFu15ll)
//============================================================================


struct  BFu9s_BFu7ll_BFu15s  {
  unsigned short v1:9;
  __tsu64 v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu9s_BFu7ll_BFu15s) C1{ Fs:9 FL:7 Fs:15}



static void Test_BFu9s_BFu7ll_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu15s");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu9s_BFu7ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu7ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu15s, BFu9s_BFu7ll_BFu15s)
//============================================================================


struct  BFu9s_BFu7ll_BFu16i  {
  unsigned short v1:9;
  __tsu64 v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu9s_BFu7ll_BFu16i) C1{ Fs:9 FL:7 Fi:16}



static void Test_BFu9s_BFu7ll_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu16i");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu9s_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu7ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu16i, BFu9s_BFu7ll_BFu16i)
//============================================================================


struct  BFu9s_BFu7ll_BFu16ll  {
  unsigned short v1:9;
  __tsu64 v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_BFu7ll_BFu16ll) C1{ Fs:9 FL:7 FL:16}



static void Test_BFu9s_BFu7ll_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu9s_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu7ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu16ll, BFu9s_BFu7ll_BFu16ll)
//============================================================================


struct  BFu9s_BFu7ll_BFu16s  {
  unsigned short v1:9;
  __tsu64 v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu9s_BFu7ll_BFu16s) C1{ Fs:9 FL:7 Fs:16}



static void Test_BFu9s_BFu7ll_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu16s");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu9s_BFu7ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu7ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu16s, BFu9s_BFu7ll_BFu16s)
//============================================================================


struct  BFu9s_BFu7ll_BFu17i  {
  unsigned short v1:9;
  __tsu64 v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu9s_BFu7ll_BFu17i) C1{ Fs:9 FL:7 Fi:17}



static void Test_BFu9s_BFu7ll_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu17i");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu9s_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu7ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu17i, BFu9s_BFu7ll_BFu17i)
//============================================================================


struct  BFu9s_BFu7ll_BFu17ll  {
  unsigned short v1:9;
  __tsu64 v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_BFu7ll_BFu17ll) C1{ Fs:9 FL:7 FL:17}



static void Test_BFu9s_BFu7ll_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu9s_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu7ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu17ll, BFu9s_BFu7ll_BFu17ll)
//============================================================================


struct  BFu9s_BFu7ll_BFu1c  {
  unsigned short v1:9;
  __tsu64 v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu9s_BFu7ll_BFu1c) C1{ Fs:9 FL:7 Fc:1}



static void Test_BFu9s_BFu7ll_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu1c");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu9s_BFu7ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu1c, BFu9s_BFu7ll_BFu1c)
//============================================================================


struct  BFu9s_BFu7ll_BFu1i  {
  unsigned short v1:9;
  __tsu64 v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu9s_BFu7ll_BFu1i) C1{ Fs:9 FL:7 Fi:1}



static void Test_BFu9s_BFu7ll_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu1i");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu9s_BFu7ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu1i, BFu9s_BFu7ll_BFu1i)
//============================================================================


struct  BFu9s_BFu7ll_BFu1ll  {
  unsigned short v1:9;
  __tsu64 v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_BFu7ll_BFu1ll) C1{ Fs:9 FL:7 FL:1}



static void Test_BFu9s_BFu7ll_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu9s_BFu7ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu1ll, BFu9s_BFu7ll_BFu1ll)
//============================================================================


struct  BFu9s_BFu7ll_BFu1s  {
  unsigned short v1:9;
  __tsu64 v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu9s_BFu7ll_BFu1s) C1{ Fs:9 FL:7 Fs:1}



static void Test_BFu9s_BFu7ll_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu1s");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu9s_BFu7ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu1s, BFu9s_BFu7ll_BFu1s)
//============================================================================


struct  BFu9s_BFu7ll_BFu31i  {
  unsigned short v1:9;
  __tsu64 v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu9s_BFu7ll_BFu31i) C1{ Fs:9 FL:7 Fi:31}



static void Test_BFu9s_BFu7ll_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu31i");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_BFu7ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu7ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu31i, BFu9s_BFu7ll_BFu31i)
//============================================================================


struct  BFu9s_BFu7ll_BFu31ll  {
  unsigned short v1:9;
  __tsu64 v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_BFu7ll_BFu31ll) C1{ Fs:9 FL:7 FL:31}



static void Test_BFu9s_BFu7ll_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu9s_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu7ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu31ll, BFu9s_BFu7ll_BFu31ll)
//============================================================================


struct  BFu9s_BFu7ll_BFu32i  {
  unsigned short v1:9;
  __tsu64 v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu9s_BFu7ll_BFu32i) C1{ Fs:9 FL:7 Fi:32}



static void Test_BFu9s_BFu7ll_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu32i");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_BFu7ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu7ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu32i, BFu9s_BFu7ll_BFu32i)
//============================================================================


struct  BFu9s_BFu7ll_BFu32ll  {
  unsigned short v1:9;
  __tsu64 v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_BFu7ll_BFu32ll) C1{ Fs:9 FL:7 FL:32}



static void Test_BFu9s_BFu7ll_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu9s_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu7ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu32ll, BFu9s_BFu7ll_BFu32ll)
//============================================================================


struct  BFu9s_BFu7ll_BFu33  {
  unsigned short v1:9;
  __tsu64 v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_BFu7ll_BFu33) C1{ Fs:9 FL:7 FL:33}



static void Test_BFu9s_BFu7ll_BFu33()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu33");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu9s_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu9s_BFu7ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu33, BFu9s_BFu7ll_BFu33)
//============================================================================


struct  BFu9s_BFu7ll_BFu7c  {
  unsigned short v1:9;
  __tsu64 v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu9s_BFu7ll_BFu7c) C1{ Fs:9 FL:7 Fc:7}



static void Test_BFu9s_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu9s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu7c, BFu9s_BFu7ll_BFu7c)
//============================================================================


struct  BFu9s_BFu7ll_BFu7i  {
  unsigned short v1:9;
  __tsu64 v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu9s_BFu7ll_BFu7i) C1{ Fs:9 FL:7 Fi:7}



static void Test_BFu9s_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu9s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu7i, BFu9s_BFu7ll_BFu7i)
//============================================================================


struct  BFu9s_BFu7ll_BFu7ll  {
  unsigned short v1:9;
  __tsu64 v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_BFu7ll_BFu7ll) C1{ Fs:9 FL:7 FL:7}



static void Test_BFu9s_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu9s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu7ll, BFu9s_BFu7ll_BFu7ll)
//============================================================================


struct  BFu9s_BFu7ll_BFu7s  {
  unsigned short v1:9;
  __tsu64 v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu9s_BFu7ll_BFu7s) C1{ Fs:9 FL:7 Fs:7}



static void Test_BFu9s_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu9s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu7s, BFu9s_BFu7ll_BFu7s)
//============================================================================


struct  BFu9s_BFu7ll_BFu8c  {
  unsigned short v1:9;
  __tsu64 v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu9s_BFu7ll_BFu8c) C1{ Fs:9 FL:7 Fc:8}



static void Test_BFu9s_BFu7ll_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu8c");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu9s_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu7ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu8c, BFu9s_BFu7ll_BFu8c)
//============================================================================


struct  BFu9s_BFu7ll_BFu8i  {
  unsigned short v1:9;
  __tsu64 v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu9s_BFu7ll_BFu8i) C1{ Fs:9 FL:7 Fi:8}



static void Test_BFu9s_BFu7ll_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu8i");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu9s_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu7ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu8i, BFu9s_BFu7ll_BFu8i)
//============================================================================


struct  BFu9s_BFu7ll_BFu8ll  {
  unsigned short v1:9;
  __tsu64 v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_BFu7ll_BFu8ll) C1{ Fs:9 FL:7 FL:8}



static void Test_BFu9s_BFu7ll_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu9s_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu7ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu8ll, BFu9s_BFu7ll_BFu8ll)
//============================================================================


struct  BFu9s_BFu7ll_BFu8s  {
  unsigned short v1:9;
  __tsu64 v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu9s_BFu7ll_BFu8s) C1{ Fs:9 FL:7 Fs:8}



static void Test_BFu9s_BFu7ll_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu8s");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu9s_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu7ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu8s, BFu9s_BFu7ll_BFu8s)
//============================================================================


struct  BFu9s_BFu7ll_BFu9i  {
  unsigned short v1:9;
  __tsu64 v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFu7ll_BFu9i) C1{ Fs:9 FL:7 Fi:9}



static void Test_BFu9s_BFu7ll_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu9i");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu9s_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu9i, BFu9s_BFu7ll_BFu9i)
//============================================================================


struct  BFu9s_BFu7ll_BFu9ll  {
  unsigned short v1:9;
  __tsu64 v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFu7ll_BFu9ll) C1{ Fs:9 FL:7 FL:9}



static void Test_BFu9s_BFu7ll_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu9s_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu9ll, BFu9s_BFu7ll_BFu9ll)
//============================================================================


struct  BFu9s_BFu7ll_BFu9s  {
  unsigned short v1:9;
  __tsu64 v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFu7ll_BFu9s) C1{ Fs:9 FL:7 Fs:9}



static void Test_BFu9s_BFu7ll_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu9s");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu9s_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu9s, BFu9s_BFu7ll_BFu9s)
//============================================================================


struct  BFu9s_BFu7ll_C  {
  unsigned short v1:9;
  __tsu64 v2:7;
  char v3;
};
//SIG(1 BFu9s_BFu7ll_C) C1{ Fs:9 FL:7 Fc}



static void Test_BFu9s_BFu7ll_C()
{
  {
    init_simple_test("BFu9s_BFu7ll_C");
    static STRUCT_IF_C BFu9s_BFu7ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_C");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_C");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_C");
    check_field_offset(lv, v3, 2, "BFu9s_BFu7ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_C, BFu9s_BFu7ll_C)
//============================================================================


struct  BFu9s_BFu7ll_D  {
  unsigned short v1:9;
  __tsu64 v2:7;
  double v3;
};
//SIG(1 BFu9s_BFu7ll_D) C1{ Fs:9 FL:7 FL}



static void Test_BFu9s_BFu7ll_D()
{
  {
    init_simple_test("BFu9s_BFu7ll_D");
    static STRUCT_IF_C BFu9s_BFu7ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu7ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_D");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_D");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu7ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_D, BFu9s_BFu7ll_D)
//============================================================================


struct  BFu9s_BFu7ll_F  {
  unsigned short v1:9;
  __tsu64 v2:7;
  float v3;
};
//SIG(1 BFu9s_BFu7ll_F) C1{ Fs:9 FL:7 Fi}



static void Test_BFu9s_BFu7ll_F()
{
  {
    init_simple_test("BFu9s_BFu7ll_F");
    static STRUCT_IF_C BFu9s_BFu7ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_F");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_F");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_F");
    check_field_offset(lv, v3, 4, "BFu9s_BFu7ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_F, BFu9s_BFu7ll_F)
//============================================================================


struct  BFu9s_BFu7ll_I  {
  unsigned short v1:9;
  __tsu64 v2:7;
  int v3;
};
//SIG(1 BFu9s_BFu7ll_I) C1{ Fs:9 FL:7 Fi}



static void Test_BFu9s_BFu7ll_I()
{
  {
    init_simple_test("BFu9s_BFu7ll_I");
    static STRUCT_IF_C BFu9s_BFu7ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_I");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_I");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_I");
    check_field_offset(lv, v3, 4, "BFu9s_BFu7ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_I, BFu9s_BFu7ll_I)
//============================================================================


struct  BFu9s_BFu7ll_Ip  {
  unsigned short v1:9;
  __tsu64 v2:7;
  int *v3;
};
//SIG(1 BFu9s_BFu7ll_Ip) C1{ Fs:9 FL:7 Fp}



static void Test_BFu9s_BFu7ll_Ip()
{
  {
    init_simple_test("BFu9s_BFu7ll_Ip");
    static STRUCT_IF_C BFu9s_BFu7ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu7ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_Ip");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_Ip");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu7ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_Ip, BFu9s_BFu7ll_Ip)
//============================================================================


struct  BFu9s_BFu7ll_L  {
  unsigned short v1:9;
  __tsu64 v2:7;
  __tsi64 v3;
};
//SIG(1 BFu9s_BFu7ll_L) C1{ Fs:9 FL:7 FL}



static void Test_BFu9s_BFu7ll_L()
{
  {
    init_simple_test("BFu9s_BFu7ll_L");
    static STRUCT_IF_C BFu9s_BFu7ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu7ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_L");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_L");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu7ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_L, BFu9s_BFu7ll_L)
//============================================================================


struct  BFu9s_BFu7ll_S  {
  unsigned short v1:9;
  __tsu64 v2:7;
  short v3;
};
//SIG(1 BFu9s_BFu7ll_S) C1{ Fs:9 FL:7 Fs}



static void Test_BFu9s_BFu7ll_S()
{
  {
    init_simple_test("BFu9s_BFu7ll_S");
    static STRUCT_IF_C BFu9s_BFu7ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_S");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_S");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_S");
    check_field_offset(lv, v3, 2, "BFu9s_BFu7ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_S, BFu9s_BFu7ll_S)
//============================================================================


struct  BFu9s_BFu7ll_Uc  {
  unsigned short v1:9;
  __tsu64 v2:7;
  unsigned char v3;
};
//SIG(1 BFu9s_BFu7ll_Uc) C1{ Fs:9 FL:7 Fc}



static void Test_BFu9s_BFu7ll_Uc()
{
  {
    init_simple_test("BFu9s_BFu7ll_Uc");
    static STRUCT_IF_C BFu9s_BFu7ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_Uc");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_Uc");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_Uc");
    check_field_offset(lv, v3, 2, "BFu9s_BFu7ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_Uc, BFu9s_BFu7ll_Uc)
//============================================================================


struct  BFu9s_BFu7ll_Ui  {
  unsigned short v1:9;
  __tsu64 v2:7;
  unsigned int v3;
};
//SIG(1 BFu9s_BFu7ll_Ui) C1{ Fs:9 FL:7 Fi}



static void Test_BFu9s_BFu7ll_Ui()
{
  {
    init_simple_test("BFu9s_BFu7ll_Ui");
    static STRUCT_IF_C BFu9s_BFu7ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_Ui");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_Ui");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_Ui");
    check_field_offset(lv, v3, 4, "BFu9s_BFu7ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_Ui, BFu9s_BFu7ll_Ui)
//============================================================================


struct  BFu9s_BFu7ll_Ul  {
  unsigned short v1:9;
  __tsu64 v2:7;
  __tsu64 v3;
};
//SIG(1 BFu9s_BFu7ll_Ul) C1{ Fs:9 FL:7 FL}



static void Test_BFu9s_BFu7ll_Ul()
{
  {
    init_simple_test("BFu9s_BFu7ll_Ul");
    static STRUCT_IF_C BFu9s_BFu7ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu7ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_Ul");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_Ul");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu7ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_Ul, BFu9s_BFu7ll_Ul)
//============================================================================


struct  BFu9s_BFu7ll_Us  {
  unsigned short v1:9;
  __tsu64 v2:7;
  unsigned short v3;
};
//SIG(1 BFu9s_BFu7ll_Us) C1{ Fs:9 FL:7 Fs}



static void Test_BFu9s_BFu7ll_Us()
{
  {
    init_simple_test("BFu9s_BFu7ll_Us");
    static STRUCT_IF_C BFu9s_BFu7ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_Us");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_Us");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_Us");
    check_field_offset(lv, v3, 2, "BFu9s_BFu7ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_Us, BFu9s_BFu7ll_Us)
//============================================================================


struct  BFu9s_BFu7ll_Vp  {
  unsigned short v1:9;
  __tsu64 v2:7;
  void *v3;
};
//SIG(1 BFu9s_BFu7ll_Vp) C1{ Fs:9 FL:7 Fp}



static void Test_BFu9s_BFu7ll_Vp()
{
  {
    init_simple_test("BFu9s_BFu7ll_Vp");
    static STRUCT_IF_C BFu9s_BFu7ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu7ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_Vp");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_Vp");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu7ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_Vp, BFu9s_BFu7ll_Vp)
//============================================================================


struct  BFu9s_BFu7s  {
  unsigned short v1:9;
  unsigned short v2:7;
};
//SIG(1 BFu9s_BFu7s) C1{ Fs:9 Fs:7}



static void Test_BFu9s_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu7s");
    static STRUCT_IF_C BFu9s_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu9s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s, BFu9s_BFu7s)
//============================================================================


struct  BFu9s_BFu7s_BFu15i  {
  unsigned short v1:9;
  unsigned short v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu9s_BFu7s_BFu15i) C1{ Fs:9 Fs:7 Fi:15}



static void Test_BFu9s_BFu7s_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu15i");
    static STRUCT_IF_C BFu9s_BFu7s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu9s_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu7s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu15i, BFu9s_BFu7s_BFu15i)
//============================================================================


struct  BFu9s_BFu7s_BFu15ll  {
  unsigned short v1:9;
  unsigned short v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_BFu7s_BFu15ll) C1{ Fs:9 Fs:7 FL:15}



static void Test_BFu9s_BFu7s_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu7s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu9s_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu7s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu15ll, BFu9s_BFu7s_BFu15ll)
//============================================================================


struct  BFu9s_BFu7s_BFu15s  {
  unsigned short v1:9;
  unsigned short v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu9s_BFu7s_BFu15s) C1{ Fs:9 Fs:7 Fs:15}



static void Test_BFu9s_BFu7s_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu15s");
    static STRUCT_IF_C BFu9s_BFu7s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu9s_BFu7s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu7s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu15s, BFu9s_BFu7s_BFu15s)
//============================================================================


struct  BFu9s_BFu7s_BFu16i  {
  unsigned short v1:9;
  unsigned short v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu9s_BFu7s_BFu16i) C1{ Fs:9 Fs:7 Fi:16}



static void Test_BFu9s_BFu7s_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu16i");
    static STRUCT_IF_C BFu9s_BFu7s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu9s_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu7s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu16i, BFu9s_BFu7s_BFu16i)
//============================================================================


struct  BFu9s_BFu7s_BFu16ll  {
  unsigned short v1:9;
  unsigned short v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_BFu7s_BFu16ll) C1{ Fs:9 Fs:7 FL:16}



static void Test_BFu9s_BFu7s_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu7s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu9s_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu7s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu16ll, BFu9s_BFu7s_BFu16ll)
//============================================================================


struct  BFu9s_BFu7s_BFu16s  {
  unsigned short v1:9;
  unsigned short v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu9s_BFu7s_BFu16s) C1{ Fs:9 Fs:7 Fs:16}



static void Test_BFu9s_BFu7s_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu16s");
    static STRUCT_IF_C BFu9s_BFu7s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu9s_BFu7s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu7s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu16s, BFu9s_BFu7s_BFu16s)
//============================================================================


struct  BFu9s_BFu7s_BFu17i  {
  unsigned short v1:9;
  unsigned short v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu9s_BFu7s_BFu17i) C1{ Fs:9 Fs:7 Fi:17}



static void Test_BFu9s_BFu7s_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu17i");
    static STRUCT_IF_C BFu9s_BFu7s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu9s_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu7s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu17i, BFu9s_BFu7s_BFu17i)
//============================================================================


struct  BFu9s_BFu7s_BFu17ll  {
  unsigned short v1:9;
  unsigned short v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_BFu7s_BFu17ll) C1{ Fs:9 Fs:7 FL:17}



static void Test_BFu9s_BFu7s_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu7s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu9s_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu7s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu17ll, BFu9s_BFu7s_BFu17ll)
//============================================================================


struct  BFu9s_BFu7s_BFu1c  {
  unsigned short v1:9;
  unsigned short v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu9s_BFu7s_BFu1c) C1{ Fs:9 Fs:7 Fc:1}



static void Test_BFu9s_BFu7s_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu1c");
    static STRUCT_IF_C BFu9s_BFu7s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu9s_BFu7s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu1c, BFu9s_BFu7s_BFu1c)
//============================================================================


struct  BFu9s_BFu7s_BFu1i  {
  unsigned short v1:9;
  unsigned short v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu9s_BFu7s_BFu1i) C1{ Fs:9 Fs:7 Fi:1}



static void Test_BFu9s_BFu7s_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu1i");
    static STRUCT_IF_C BFu9s_BFu7s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu9s_BFu7s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu1i, BFu9s_BFu7s_BFu1i)
//============================================================================


struct  BFu9s_BFu7s_BFu1ll  {
  unsigned short v1:9;
  unsigned short v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_BFu7s_BFu1ll) C1{ Fs:9 Fs:7 FL:1}



static void Test_BFu9s_BFu7s_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu7s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu9s_BFu7s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu1ll, BFu9s_BFu7s_BFu1ll)
//============================================================================


struct  BFu9s_BFu7s_BFu1s  {
  unsigned short v1:9;
  unsigned short v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu9s_BFu7s_BFu1s) C1{ Fs:9 Fs:7 Fs:1}



static void Test_BFu9s_BFu7s_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu1s");
    static STRUCT_IF_C BFu9s_BFu7s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu9s_BFu7s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu1s, BFu9s_BFu7s_BFu1s)
//============================================================================


struct  BFu9s_BFu7s_BFu31i  {
  unsigned short v1:9;
  unsigned short v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu9s_BFu7s_BFu31i) C1{ Fs:9 Fs:7 Fi:31}



static void Test_BFu9s_BFu7s_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu31i");
    static STRUCT_IF_C BFu9s_BFu7s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_BFu7s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu7s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu31i, BFu9s_BFu7s_BFu31i)
//============================================================================


struct  BFu9s_BFu7s_BFu31ll  {
  unsigned short v1:9;
  unsigned short v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_BFu7s_BFu31ll) C1{ Fs:9 Fs:7 FL:31}



static void Test_BFu9s_BFu7s_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu7s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu9s_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu7s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu31ll, BFu9s_BFu7s_BFu31ll)
//============================================================================


struct  BFu9s_BFu7s_BFu32i  {
  unsigned short v1:9;
  unsigned short v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu9s_BFu7s_BFu32i) C1{ Fs:9 Fs:7 Fi:32}



static void Test_BFu9s_BFu7s_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu32i");
    static STRUCT_IF_C BFu9s_BFu7s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu7s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu32i, BFu9s_BFu7s_BFu32i)
//============================================================================


struct  BFu9s_BFu7s_BFu32ll  {
  unsigned short v1:9;
  unsigned short v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_BFu7s_BFu32ll) C1{ Fs:9 Fs:7 FL:32}



static void Test_BFu9s_BFu7s_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu7s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu9s_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu7s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu32ll, BFu9s_BFu7s_BFu32ll)
//============================================================================


struct  BFu9s_BFu7s_BFu33  {
  unsigned short v1:9;
  unsigned short v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_BFu7s_BFu33) C1{ Fs:9 Fs:7 FL:33}



static void Test_BFu9s_BFu7s_BFu33()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu33");
    static STRUCT_IF_C BFu9s_BFu7s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu9s_BFu7s_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu9s_BFu7s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu33, BFu9s_BFu7s_BFu33)
//============================================================================


struct  BFu9s_BFu7s_BFu7c  {
  unsigned short v1:9;
  unsigned short v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu9s_BFu7s_BFu7c) C1{ Fs:9 Fs:7 Fc:7}



static void Test_BFu9s_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu7c");
    static STRUCT_IF_C BFu9s_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu9s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu7c, BFu9s_BFu7s_BFu7c)
//============================================================================


struct  BFu9s_BFu7s_BFu7i  {
  unsigned short v1:9;
  unsigned short v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu9s_BFu7s_BFu7i) C1{ Fs:9 Fs:7 Fi:7}



static void Test_BFu9s_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu7i");
    static STRUCT_IF_C BFu9s_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu9s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu7i, BFu9s_BFu7s_BFu7i)
//============================================================================


struct  BFu9s_BFu7s_BFu7ll  {
  unsigned short v1:9;
  unsigned short v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_BFu7s_BFu7ll) C1{ Fs:9 Fs:7 FL:7}



static void Test_BFu9s_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu9s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu7ll, BFu9s_BFu7s_BFu7ll)
//============================================================================


struct  BFu9s_BFu7s_BFu7s  {
  unsigned short v1:9;
  unsigned short v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu9s_BFu7s_BFu7s) C1{ Fs:9 Fs:7 Fs:7}



static void Test_BFu9s_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu7s");
    static STRUCT_IF_C BFu9s_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu9s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu7s, BFu9s_BFu7s_BFu7s)
//============================================================================


struct  BFu9s_BFu7s_BFu8c  {
  unsigned short v1:9;
  unsigned short v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu9s_BFu7s_BFu8c) C1{ Fs:9 Fs:7 Fc:8}



static void Test_BFu9s_BFu7s_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu8c");
    static STRUCT_IF_C BFu9s_BFu7s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu9s_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu7s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu8c, BFu9s_BFu7s_BFu8c)
//============================================================================


struct  BFu9s_BFu7s_BFu8i  {
  unsigned short v1:9;
  unsigned short v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu9s_BFu7s_BFu8i) C1{ Fs:9 Fs:7 Fi:8}



static void Test_BFu9s_BFu7s_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu8i");
    static STRUCT_IF_C BFu9s_BFu7s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu9s_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu7s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu8i, BFu9s_BFu7s_BFu8i)
//============================================================================


struct  BFu9s_BFu7s_BFu8ll  {
  unsigned short v1:9;
  unsigned short v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_BFu7s_BFu8ll) C1{ Fs:9 Fs:7 FL:8}



static void Test_BFu9s_BFu7s_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu7s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu9s_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu7s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu8ll, BFu9s_BFu7s_BFu8ll)
//============================================================================


struct  BFu9s_BFu7s_BFu8s  {
  unsigned short v1:9;
  unsigned short v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu9s_BFu7s_BFu8s) C1{ Fs:9 Fs:7 Fs:8}



static void Test_BFu9s_BFu7s_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu8s");
    static STRUCT_IF_C BFu9s_BFu7s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu9s_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu7s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu8s, BFu9s_BFu7s_BFu8s)
//============================================================================


struct  BFu9s_BFu7s_BFu9i  {
  unsigned short v1:9;
  unsigned short v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFu7s_BFu9i) C1{ Fs:9 Fs:7 Fi:9}



static void Test_BFu9s_BFu7s_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu9i");
    static STRUCT_IF_C BFu9s_BFu7s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu9s_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu9i, BFu9s_BFu7s_BFu9i)
//============================================================================


struct  BFu9s_BFu7s_BFu9ll  {
  unsigned short v1:9;
  unsigned short v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFu7s_BFu9ll) C1{ Fs:9 Fs:7 FL:9}



static void Test_BFu9s_BFu7s_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu7s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu9s_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu9ll, BFu9s_BFu7s_BFu9ll)
//============================================================================


struct  BFu9s_BFu7s_BFu9s  {
  unsigned short v1:9;
  unsigned short v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFu7s_BFu9s) C1{ Fs:9 Fs:7 Fs:9}



static void Test_BFu9s_BFu7s_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu9s");
    static STRUCT_IF_C BFu9s_BFu7s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu9s_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu9s, BFu9s_BFu7s_BFu9s)
//============================================================================


struct  BFu9s_BFu7s_C  {
  unsigned short v1:9;
  unsigned short v2:7;
  char v3;
};
//SIG(1 BFu9s_BFu7s_C) C1{ Fs:9 Fs:7 Fc}



static void Test_BFu9s_BFu7s_C()
{
  {
    init_simple_test("BFu9s_BFu7s_C");
    static STRUCT_IF_C BFu9s_BFu7s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7s_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_C");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_C");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_C");
    check_field_offset(lv, v3, 2, "BFu9s_BFu7s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_C, BFu9s_BFu7s_C)
//============================================================================


struct  BFu9s_BFu7s_D  {
  unsigned short v1:9;
  unsigned short v2:7;
  double v3;
};
//SIG(1 BFu9s_BFu7s_D) C1{ Fs:9 Fs:7 FL}



static void Test_BFu9s_BFu7s_D()
{
  {
    init_simple_test("BFu9s_BFu7s_D");
    static STRUCT_IF_C BFu9s_BFu7s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu7s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7s_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_D");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_D");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu7s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_D, BFu9s_BFu7s_D)
//============================================================================


struct  BFu9s_BFu7s_F  {
  unsigned short v1:9;
  unsigned short v2:7;
  float v3;
};
//SIG(1 BFu9s_BFu7s_F) C1{ Fs:9 Fs:7 Fi}



static void Test_BFu9s_BFu7s_F()
{
  {
    init_simple_test("BFu9s_BFu7s_F");
    static STRUCT_IF_C BFu9s_BFu7s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7s_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_F");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_F");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_F");
    check_field_offset(lv, v3, 4, "BFu9s_BFu7s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_F, BFu9s_BFu7s_F)
//============================================================================


struct  BFu9s_BFu7s_I  {
  unsigned short v1:9;
  unsigned short v2:7;
  int v3;
};
//SIG(1 BFu9s_BFu7s_I) C1{ Fs:9 Fs:7 Fi}



static void Test_BFu9s_BFu7s_I()
{
  {
    init_simple_test("BFu9s_BFu7s_I");
    static STRUCT_IF_C BFu9s_BFu7s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7s_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_I");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_I");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_I");
    check_field_offset(lv, v3, 4, "BFu9s_BFu7s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_I, BFu9s_BFu7s_I)
//============================================================================


struct  BFu9s_BFu7s_Ip  {
  unsigned short v1:9;
  unsigned short v2:7;
  int *v3;
};
//SIG(1 BFu9s_BFu7s_Ip) C1{ Fs:9 Fs:7 Fp}



static void Test_BFu9s_BFu7s_Ip()
{
  {
    init_simple_test("BFu9s_BFu7s_Ip");
    static STRUCT_IF_C BFu9s_BFu7s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu7s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_Ip");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_Ip");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu7s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_Ip, BFu9s_BFu7s_Ip)
//============================================================================


struct  BFu9s_BFu7s_L  {
  unsigned short v1:9;
  unsigned short v2:7;
  __tsi64 v3;
};
//SIG(1 BFu9s_BFu7s_L) C1{ Fs:9 Fs:7 FL}



static void Test_BFu9s_BFu7s_L()
{
  {
    init_simple_test("BFu9s_BFu7s_L");
    static STRUCT_IF_C BFu9s_BFu7s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu7s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7s_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_L");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_L");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu7s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_L, BFu9s_BFu7s_L)
//============================================================================


struct  BFu9s_BFu7s_S  {
  unsigned short v1:9;
  unsigned short v2:7;
  short v3;
};
//SIG(1 BFu9s_BFu7s_S) C1{ Fs:9 Fs:7 Fs}



static void Test_BFu9s_BFu7s_S()
{
  {
    init_simple_test("BFu9s_BFu7s_S");
    static STRUCT_IF_C BFu9s_BFu7s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7s_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_S");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_S");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_S");
    check_field_offset(lv, v3, 2, "BFu9s_BFu7s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_S, BFu9s_BFu7s_S)
//============================================================================


struct  BFu9s_BFu7s_Uc  {
  unsigned short v1:9;
  unsigned short v2:7;
  unsigned char v3;
};
//SIG(1 BFu9s_BFu7s_Uc) C1{ Fs:9 Fs:7 Fc}



static void Test_BFu9s_BFu7s_Uc()
{
  {
    init_simple_test("BFu9s_BFu7s_Uc");
    static STRUCT_IF_C BFu9s_BFu7s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_Uc");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_Uc");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_Uc");
    check_field_offset(lv, v3, 2, "BFu9s_BFu7s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_Uc, BFu9s_BFu7s_Uc)
//============================================================================


struct  BFu9s_BFu7s_Ui  {
  unsigned short v1:9;
  unsigned short v2:7;
  unsigned int v3;
};
//SIG(1 BFu9s_BFu7s_Ui) C1{ Fs:9 Fs:7 Fi}



static void Test_BFu9s_BFu7s_Ui()
{
  {
    init_simple_test("BFu9s_BFu7s_Ui");
    static STRUCT_IF_C BFu9s_BFu7s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu7s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_Ui");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_Ui");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_Ui");
    check_field_offset(lv, v3, 4, "BFu9s_BFu7s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_Ui, BFu9s_BFu7s_Ui)
//============================================================================


struct  BFu9s_BFu7s_Ul  {
  unsigned short v1:9;
  unsigned short v2:7;
  __tsu64 v3;
};
//SIG(1 BFu9s_BFu7s_Ul) C1{ Fs:9 Fs:7 FL}



static void Test_BFu9s_BFu7s_Ul()
{
  {
    init_simple_test("BFu9s_BFu7s_Ul");
    static STRUCT_IF_C BFu9s_BFu7s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu7s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_Ul");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_Ul");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu7s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_Ul, BFu9s_BFu7s_Ul)
//============================================================================


struct  BFu9s_BFu7s_Us  {
  unsigned short v1:9;
  unsigned short v2:7;
  unsigned short v3;
};
//SIG(1 BFu9s_BFu7s_Us) C1{ Fs:9 Fs:7 Fs}



static void Test_BFu9s_BFu7s_Us()
{
  {
    init_simple_test("BFu9s_BFu7s_Us");
    static STRUCT_IF_C BFu9s_BFu7s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_Us");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_Us");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_Us");
    check_field_offset(lv, v3, 2, "BFu9s_BFu7s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_Us, BFu9s_BFu7s_Us)
//============================================================================


struct  BFu9s_BFu7s_Vp  {
  unsigned short v1:9;
  unsigned short v2:7;
  void *v3;
};
//SIG(1 BFu9s_BFu7s_Vp) C1{ Fs:9 Fs:7 Fp}



static void Test_BFu9s_BFu7s_Vp()
{
  {
    init_simple_test("BFu9s_BFu7s_Vp");
    static STRUCT_IF_C BFu9s_BFu7s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu7s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_Vp");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_Vp");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu7s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_Vp, BFu9s_BFu7s_Vp)
//============================================================================


struct  BFu9s_BFu8c  {
  unsigned short v1:9;
  unsigned char v2:8;
};
//SIG(1 BFu9s_BFu8c) C1{ Fs:9 Fc:8}



static void Test_BFu9s_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu8c");
    static STRUCT_IF_C BFu9s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c, BFu9s_BFu8c)
//============================================================================


struct  BFu9s_BFu8c_BFu15i  {
  unsigned short v1:9;
  unsigned char v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu9s_BFu8c_BFu15i) C1{ Fs:9 Fc:8 Fi:15}



static void Test_BFu9s_BFu8c_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu15i");
    static STRUCT_IF_C BFu9s_BFu8c_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu8c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu15i, BFu9s_BFu8c_BFu15i)
//============================================================================


struct  BFu9s_BFu8c_BFu15ll  {
  unsigned short v1:9;
  unsigned char v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_BFu8c_BFu15ll) C1{ Fs:9 Fc:8 FL:15}



static void Test_BFu9s_BFu8c_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu8c_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu9s_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu8c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu15ll, BFu9s_BFu8c_BFu15ll)
//============================================================================


struct  BFu9s_BFu8c_BFu15s  {
  unsigned short v1:9;
  unsigned char v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu9s_BFu8c_BFu15s) C1{ Fs:9 Fc:8 Fs:15}



static void Test_BFu9s_BFu8c_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu15s");
    static STRUCT_IF_C BFu9s_BFu8c_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu8c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu8c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu15s, BFu9s_BFu8c_BFu15s)
//============================================================================


struct  BFu9s_BFu8c_BFu16i  {
  unsigned short v1:9;
  unsigned char v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu9s_BFu8c_BFu16i) C1{ Fs:9 Fc:8 Fi:16}



static void Test_BFu9s_BFu8c_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu16i");
    static STRUCT_IF_C BFu9s_BFu8c_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu8c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu16i, BFu9s_BFu8c_BFu16i)
//============================================================================


struct  BFu9s_BFu8c_BFu16ll  {
  unsigned short v1:9;
  unsigned char v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_BFu8c_BFu16ll) C1{ Fs:9 Fc:8 FL:16}



static void Test_BFu9s_BFu8c_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu8c_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu9s_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu8c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu16ll, BFu9s_BFu8c_BFu16ll)
//============================================================================


struct  BFu9s_BFu8c_BFu16s  {
  unsigned short v1:9;
  unsigned char v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu9s_BFu8c_BFu16s) C1{ Fs:9 Fc:8 Fs:16}



static void Test_BFu9s_BFu8c_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu16s");
    static STRUCT_IF_C BFu9s_BFu8c_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu8c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu8c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu16s, BFu9s_BFu8c_BFu16s)
//============================================================================


struct  BFu9s_BFu8c_BFu17i  {
  unsigned short v1:9;
  unsigned char v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu9s_BFu8c_BFu17i) C1{ Fs:9 Fc:8 Fi:17}



static void Test_BFu9s_BFu8c_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu17i");
    static STRUCT_IF_C BFu9s_BFu8c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu9s_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu8c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu17i, BFu9s_BFu8c_BFu17i)
//============================================================================


struct  BFu9s_BFu8c_BFu17ll  {
  unsigned short v1:9;
  unsigned char v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_BFu8c_BFu17ll) C1{ Fs:9 Fc:8 FL:17}



static void Test_BFu9s_BFu8c_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu8c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu9s_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu8c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu17ll, BFu9s_BFu8c_BFu17ll)
//============================================================================


struct  BFu9s_BFu8c_BFu1c  {
  unsigned short v1:9;
  unsigned char v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu9s_BFu8c_BFu1c) C1{ Fs:9 Fc:8 Fc:1}



static void Test_BFu9s_BFu8c_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu1c");
    static STRUCT_IF_C BFu9s_BFu8c_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8c_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu9s_BFu8c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu1c, BFu9s_BFu8c_BFu1c)
//============================================================================


struct  BFu9s_BFu8c_BFu1i  {
  unsigned short v1:9;
  unsigned char v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu9s_BFu8c_BFu1i) C1{ Fs:9 Fc:8 Fi:1}



static void Test_BFu9s_BFu8c_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu1i");
    static STRUCT_IF_C BFu9s_BFu8c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu9s_BFu8c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu1i, BFu9s_BFu8c_BFu1i)
//============================================================================


struct  BFu9s_BFu8c_BFu1ll  {
  unsigned short v1:9;
  unsigned char v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_BFu8c_BFu1ll) C1{ Fs:9 Fc:8 FL:1}



static void Test_BFu9s_BFu8c_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu8c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu9s_BFu8c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu1ll, BFu9s_BFu8c_BFu1ll)
//============================================================================


struct  BFu9s_BFu8c_BFu1s  {
  unsigned short v1:9;
  unsigned char v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu9s_BFu8c_BFu1s) C1{ Fs:9 Fc:8 Fs:1}



static void Test_BFu9s_BFu8c_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu1s");
    static STRUCT_IF_C BFu9s_BFu8c_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu9s_BFu8c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu1s, BFu9s_BFu8c_BFu1s)
//============================================================================


struct  BFu9s_BFu8c_BFu31i  {
  unsigned short v1:9;
  unsigned char v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu9s_BFu8c_BFu31i) C1{ Fs:9 Fc:8 Fi:31}



static void Test_BFu9s_BFu8c_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu31i");
    static STRUCT_IF_C BFu9s_BFu8c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu8c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu31i, BFu9s_BFu8c_BFu31i)
//============================================================================


struct  BFu9s_BFu8c_BFu31ll  {
  unsigned short v1:9;
  unsigned char v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_BFu8c_BFu31ll) C1{ Fs:9 Fc:8 FL:31}



static void Test_BFu9s_BFu8c_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu8c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu9s_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu8c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu31ll, BFu9s_BFu8c_BFu31ll)
//============================================================================


struct  BFu9s_BFu8c_BFu32i  {
  unsigned short v1:9;
  unsigned char v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu9s_BFu8c_BFu32i) C1{ Fs:9 Fc:8 Fi:32}



static void Test_BFu9s_BFu8c_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu32i");
    static STRUCT_IF_C BFu9s_BFu8c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu8c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu32i, BFu9s_BFu8c_BFu32i)
//============================================================================


struct  BFu9s_BFu8c_BFu32ll  {
  unsigned short v1:9;
  unsigned char v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_BFu8c_BFu32ll) C1{ Fs:9 Fc:8 FL:32}



static void Test_BFu9s_BFu8c_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu8c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu9s_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu8c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu32ll, BFu9s_BFu8c_BFu32ll)
//============================================================================


struct  BFu9s_BFu8c_BFu33  {
  unsigned short v1:9;
  unsigned char v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_BFu8c_BFu33) C1{ Fs:9 Fc:8 FL:33}



static void Test_BFu9s_BFu8c_BFu33()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu33");
    static STRUCT_IF_C BFu9s_BFu8c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu9s_BFu8c_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu9s_BFu8c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu33, BFu9s_BFu8c_BFu33)
//============================================================================


struct  BFu9s_BFu8c_BFu7c  {
  unsigned short v1:9;
  unsigned char v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu9s_BFu8c_BFu7c) C1{ Fs:9 Fc:8 Fc:7}



static void Test_BFu9s_BFu8c_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu7c");
    static STRUCT_IF_C BFu9s_BFu8c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu9s_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu8c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu7c, BFu9s_BFu8c_BFu7c)
//============================================================================


struct  BFu9s_BFu8c_BFu7i  {
  unsigned short v1:9;
  unsigned char v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu9s_BFu8c_BFu7i) C1{ Fs:9 Fc:8 Fi:7}



static void Test_BFu9s_BFu8c_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu7i");
    static STRUCT_IF_C BFu9s_BFu8c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu9s_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu8c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu7i, BFu9s_BFu8c_BFu7i)
//============================================================================


struct  BFu9s_BFu8c_BFu7ll  {
  unsigned short v1:9;
  unsigned char v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_BFu8c_BFu7ll) C1{ Fs:9 Fc:8 FL:7}



static void Test_BFu9s_BFu8c_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu8c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu9s_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu8c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu7ll, BFu9s_BFu8c_BFu7ll)
//============================================================================


struct  BFu9s_BFu8c_BFu7s  {
  unsigned short v1:9;
  unsigned char v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu9s_BFu8c_BFu7s) C1{ Fs:9 Fc:8 Fs:7}



static void Test_BFu9s_BFu8c_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu7s");
    static STRUCT_IF_C BFu9s_BFu8c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu9s_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu8c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu7s, BFu9s_BFu8c_BFu7s)
//============================================================================


struct  BFu9s_BFu8c_BFu8c  {
  unsigned short v1:9;
  unsigned char v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu9s_BFu8c_BFu8c) C1{ Fs:9 Fc:8 Fc:8}



static void Test_BFu9s_BFu8c_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu8c");
    static STRUCT_IF_C BFu9s_BFu8c_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8c_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu9s_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu8c, BFu9s_BFu8c_BFu8c)
//============================================================================


struct  BFu9s_BFu8c_BFu8i  {
  unsigned short v1:9;
  unsigned char v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu9s_BFu8c_BFu8i) C1{ Fs:9 Fc:8 Fi:8}



static void Test_BFu9s_BFu8c_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu8i");
    static STRUCT_IF_C BFu9s_BFu8c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu9s_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu8i, BFu9s_BFu8c_BFu8i)
//============================================================================


struct  BFu9s_BFu8c_BFu8ll  {
  unsigned short v1:9;
  unsigned char v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_BFu8c_BFu8ll) C1{ Fs:9 Fc:8 FL:8}



static void Test_BFu9s_BFu8c_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu8c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu9s_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu8ll, BFu9s_BFu8c_BFu8ll)
//============================================================================


struct  BFu9s_BFu8c_BFu8s  {
  unsigned short v1:9;
  unsigned char v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu9s_BFu8c_BFu8s) C1{ Fs:9 Fc:8 Fs:8}



static void Test_BFu9s_BFu8c_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu8s");
    static STRUCT_IF_C BFu9s_BFu8c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu9s_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu8s, BFu9s_BFu8c_BFu8s)
//============================================================================


struct  BFu9s_BFu8c_BFu9i  {
  unsigned short v1:9;
  unsigned char v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFu8c_BFu9i) C1{ Fs:9 Fc:8 Fi:9}



static void Test_BFu9s_BFu8c_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu9i");
    static STRUCT_IF_C BFu9s_BFu8c_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu9i, BFu9s_BFu8c_BFu9i)
//============================================================================


struct  BFu9s_BFu8c_BFu9ll  {
  unsigned short v1:9;
  unsigned char v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFu8c_BFu9ll) C1{ Fs:9 Fc:8 FL:9}



static void Test_BFu9s_BFu8c_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu8c_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu9s_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu9ll, BFu9s_BFu8c_BFu9ll)
//============================================================================


struct  BFu9s_BFu8c_BFu9s  {
  unsigned short v1:9;
  unsigned char v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFu8c_BFu9s) C1{ Fs:9 Fc:8 Fs:9}



static void Test_BFu9s_BFu8c_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu9s");
    static STRUCT_IF_C BFu9s_BFu8c_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu8c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu9s, BFu9s_BFu8c_BFu9s)
//============================================================================


struct  BFu9s_BFu8c_C  {
  unsigned short v1:9;
  unsigned char v2:8;
  char v3;
};
//SIG(1 BFu9s_BFu8c_C) C1{ Fs:9 Fc:8 Fc}



static void Test_BFu9s_BFu8c_C()
{
  {
    init_simple_test("BFu9s_BFu8c_C");
    static STRUCT_IF_C BFu9s_BFu8c_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8c_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8c_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_C");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_C");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_C");
    check_field_offset(lv, v3, 3, "BFu9s_BFu8c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_C, BFu9s_BFu8c_C)
//============================================================================


struct  BFu9s_BFu8c_D  {
  unsigned short v1:9;
  unsigned char v2:8;
  double v3;
};
//SIG(1 BFu9s_BFu8c_D) C1{ Fs:9 Fc:8 FL}



static void Test_BFu9s_BFu8c_D()
{
  {
    init_simple_test("BFu9s_BFu8c_D");
    static STRUCT_IF_C BFu9s_BFu8c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu8c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8c_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_D");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_D");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu8c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_D, BFu9s_BFu8c_D)
//============================================================================


struct  BFu9s_BFu8c_F  {
  unsigned short v1:9;
  unsigned char v2:8;
  float v3;
};
//SIG(1 BFu9s_BFu8c_F) C1{ Fs:9 Fc:8 Fi}



static void Test_BFu9s_BFu8c_F()
{
  {
    init_simple_test("BFu9s_BFu8c_F");
    static STRUCT_IF_C BFu9s_BFu8c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8c_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_F");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_F");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_F");
    check_field_offset(lv, v3, 4, "BFu9s_BFu8c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_F, BFu9s_BFu8c_F)
//============================================================================


struct  BFu9s_BFu8c_I  {
  unsigned short v1:9;
  unsigned char v2:8;
  int v3;
};
//SIG(1 BFu9s_BFu8c_I) C1{ Fs:9 Fc:8 Fi}



static void Test_BFu9s_BFu8c_I()
{
  {
    init_simple_test("BFu9s_BFu8c_I");
    static STRUCT_IF_C BFu9s_BFu8c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8c_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_I");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_I");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_I");
    check_field_offset(lv, v3, 4, "BFu9s_BFu8c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_I, BFu9s_BFu8c_I)
//============================================================================


struct  BFu9s_BFu8c_Ip  {
  unsigned short v1:9;
  unsigned char v2:8;
  int *v3;
};
//SIG(1 BFu9s_BFu8c_Ip) C1{ Fs:9 Fc:8 Fp}



static void Test_BFu9s_BFu8c_Ip()
{
  {
    init_simple_test("BFu9s_BFu8c_Ip");
    static STRUCT_IF_C BFu9s_BFu8c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu8c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_Ip");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_Ip");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu8c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_Ip, BFu9s_BFu8c_Ip)
//============================================================================


struct  BFu9s_BFu8c_L  {
  unsigned short v1:9;
  unsigned char v2:8;
  __tsi64 v3;
};
//SIG(1 BFu9s_BFu8c_L) C1{ Fs:9 Fc:8 FL}



static void Test_BFu9s_BFu8c_L()
{
  {
    init_simple_test("BFu9s_BFu8c_L");
    static STRUCT_IF_C BFu9s_BFu8c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu8c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8c_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_L");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_L");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu8c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_L, BFu9s_BFu8c_L)
//============================================================================


struct  BFu9s_BFu8c_S  {
  unsigned short v1:9;
  unsigned char v2:8;
  short v3;
};
//SIG(1 BFu9s_BFu8c_S) C1{ Fs:9 Fc:8 Fs}



static void Test_BFu9s_BFu8c_S()
{
  {
    init_simple_test("BFu9s_BFu8c_S");
    static STRUCT_IF_C BFu9s_BFu8c_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu8c_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8c_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_S");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_S");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_S");
    check_field_offset(lv, v3, 4, "BFu9s_BFu8c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_S, BFu9s_BFu8c_S)
//============================================================================


struct  BFu9s_BFu8c_Uc  {
  unsigned short v1:9;
  unsigned char v2:8;
  unsigned char v3;
};
//SIG(1 BFu9s_BFu8c_Uc) C1{ Fs:9 Fc:8 Fc}



static void Test_BFu9s_BFu8c_Uc()
{
  {
    init_simple_test("BFu9s_BFu8c_Uc");
    static STRUCT_IF_C BFu9s_BFu8c_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8c_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_Uc");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_Uc");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_Uc");
    check_field_offset(lv, v3, 3, "BFu9s_BFu8c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_Uc, BFu9s_BFu8c_Uc)
//============================================================================


struct  BFu9s_BFu8c_Ui  {
  unsigned short v1:9;
  unsigned char v2:8;
  unsigned int v3;
};
//SIG(1 BFu9s_BFu8c_Ui) C1{ Fs:9 Fc:8 Fi}



static void Test_BFu9s_BFu8c_Ui()
{
  {
    init_simple_test("BFu9s_BFu8c_Ui");
    static STRUCT_IF_C BFu9s_BFu8c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_Ui");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_Ui");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_Ui");
    check_field_offset(lv, v3, 4, "BFu9s_BFu8c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_Ui, BFu9s_BFu8c_Ui)
//============================================================================


struct  BFu9s_BFu8c_Ul  {
  unsigned short v1:9;
  unsigned char v2:8;
  __tsu64 v3;
};
//SIG(1 BFu9s_BFu8c_Ul) C1{ Fs:9 Fc:8 FL}



static void Test_BFu9s_BFu8c_Ul()
{
  {
    init_simple_test("BFu9s_BFu8c_Ul");
    static STRUCT_IF_C BFu9s_BFu8c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu8c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_Ul");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_Ul");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu8c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_Ul, BFu9s_BFu8c_Ul)
//============================================================================


struct  BFu9s_BFu8c_Us  {
  unsigned short v1:9;
  unsigned char v2:8;
  unsigned short v3;
};
//SIG(1 BFu9s_BFu8c_Us) C1{ Fs:9 Fc:8 Fs}



static void Test_BFu9s_BFu8c_Us()
{
  {
    init_simple_test("BFu9s_BFu8c_Us");
    static STRUCT_IF_C BFu9s_BFu8c_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu8c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_Us");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_Us");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_Us");
    check_field_offset(lv, v3, 4, "BFu9s_BFu8c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_Us, BFu9s_BFu8c_Us)
//============================================================================


struct  BFu9s_BFu8c_Vp  {
  unsigned short v1:9;
  unsigned char v2:8;
  void *v3;
};
//SIG(1 BFu9s_BFu8c_Vp) C1{ Fs:9 Fc:8 Fp}



static void Test_BFu9s_BFu8c_Vp()
{
  {
    init_simple_test("BFu9s_BFu8c_Vp");
    static STRUCT_IF_C BFu9s_BFu8c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu8c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_Vp");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_Vp");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu8c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_Vp, BFu9s_BFu8c_Vp)
//============================================================================


struct  BFu9s_BFu8i  {
  unsigned short v1:9;
  unsigned int v2:8;
};
//SIG(1 BFu9s_BFu8i) C1{ Fs:9 Fi:8}



static void Test_BFu9s_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu8i");
    static STRUCT_IF_C BFu9s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i, BFu9s_BFu8i)
//============================================================================


struct  BFu9s_BFu8i_BFu15i  {
  unsigned short v1:9;
  unsigned int v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu9s_BFu8i_BFu15i) C1{ Fs:9 Fi:8 Fi:15}



static void Test_BFu9s_BFu8i_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu15i");
    static STRUCT_IF_C BFu9s_BFu8i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "BFu9s_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu8i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu15i, BFu9s_BFu8i_BFu15i)
//============================================================================


struct  BFu9s_BFu8i_BFu15ll  {
  unsigned short v1:9;
  unsigned int v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_BFu8i_BFu15ll) C1{ Fs:9 Fi:8 FL:15}



static void Test_BFu9s_BFu8i_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu8i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "BFu9s_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu8i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu15ll, BFu9s_BFu8i_BFu15ll)
//============================================================================


struct  BFu9s_BFu8i_BFu15s  {
  unsigned short v1:9;
  unsigned int v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu9s_BFu8i_BFu15s) C1{ Fs:9 Fi:8 Fs:15}



static void Test_BFu9s_BFu8i_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu15s");
    static STRUCT_IF_C BFu9s_BFu8i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "BFu9s_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu8i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu15s, BFu9s_BFu8i_BFu15s)
//============================================================================


struct  BFu9s_BFu8i_BFu16i  {
  unsigned short v1:9;
  unsigned int v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu9s_BFu8i_BFu16i) C1{ Fs:9 Fi:8 Fi:16}



static void Test_BFu9s_BFu8i_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu16i");
    static STRUCT_IF_C BFu9s_BFu8i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu8i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu16i, BFu9s_BFu8i_BFu16i)
//============================================================================


struct  BFu9s_BFu8i_BFu16ll  {
  unsigned short v1:9;
  unsigned int v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_BFu8i_BFu16ll) C1{ Fs:9 Fi:8 FL:16}



static void Test_BFu9s_BFu8i_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu8i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 1, 16, 1, "BFu9s_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu8i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu16ll, BFu9s_BFu8i_BFu16ll)
//============================================================================


struct  BFu9s_BFu8i_BFu16s  {
  unsigned short v1:9;
  unsigned int v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu9s_BFu8i_BFu16s) C1{ Fs:9 Fi:8 Fs:16}



static void Test_BFu9s_BFu8i_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu16s");
    static STRUCT_IF_C BFu9s_BFu8i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu8i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu16s, BFu9s_BFu8i_BFu16s)
//============================================================================


struct  BFu9s_BFu8i_BFu17i  {
  unsigned short v1:9;
  unsigned int v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu9s_BFu8i_BFu17i) C1{ Fs:9 Fi:8 Fi:17}



static void Test_BFu9s_BFu8i_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu17i");
    static STRUCT_IF_C BFu9s_BFu8i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu9s_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu8i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu17i, BFu9s_BFu8i_BFu17i)
//============================================================================


struct  BFu9s_BFu8i_BFu17ll  {
  unsigned short v1:9;
  unsigned int v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_BFu8i_BFu17ll) C1{ Fs:9 Fi:8 FL:17}



static void Test_BFu9s_BFu8i_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu8i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 1, 17, 1, "BFu9s_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu8i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu17ll, BFu9s_BFu8i_BFu17ll)
//============================================================================


struct  BFu9s_BFu8i_BFu1c  {
  unsigned short v1:9;
  unsigned int v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu9s_BFu8i_BFu1c) C1{ Fs:9 Fi:8 Fc:1}



static void Test_BFu9s_BFu8i_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu1c");
    static STRUCT_IF_C BFu9s_BFu8i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu1c");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "BFu9s_BFu8i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu1c, BFu9s_BFu8i_BFu1c)
//============================================================================


struct  BFu9s_BFu8i_BFu1i  {
  unsigned short v1:9;
  unsigned int v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu9s_BFu8i_BFu1i) C1{ Fs:9 Fi:8 Fi:1}



static void Test_BFu9s_BFu8i_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu1i");
    static STRUCT_IF_C BFu9s_BFu8i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu1i");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "BFu9s_BFu8i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu1i, BFu9s_BFu8i_BFu1i)
//============================================================================


struct  BFu9s_BFu8i_BFu1ll  {
  unsigned short v1:9;
  unsigned int v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_BFu8i_BFu1ll) C1{ Fs:9 Fi:8 FL:1}



static void Test_BFu9s_BFu8i_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu8i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu1ll");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "BFu9s_BFu8i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu1ll, BFu9s_BFu8i_BFu1ll)
//============================================================================


struct  BFu9s_BFu8i_BFu1s  {
  unsigned short v1:9;
  unsigned int v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu9s_BFu8i_BFu1s) C1{ Fs:9 Fi:8 Fs:1}



static void Test_BFu9s_BFu8i_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu1s");
    static STRUCT_IF_C BFu9s_BFu8i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu1s");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "BFu9s_BFu8i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu1s, BFu9s_BFu8i_BFu1s)
//============================================================================


struct  BFu9s_BFu8i_BFu31i  {
  unsigned short v1:9;
  unsigned int v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu9s_BFu8i_BFu31i) C1{ Fs:9 Fi:8 Fi:31}



static void Test_BFu9s_BFu8i_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu31i");
    static STRUCT_IF_C BFu9s_BFu8i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu8i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu31i, BFu9s_BFu8i_BFu31i)
//============================================================================


struct  BFu9s_BFu8i_BFu31ll  {
  unsigned short v1:9;
  unsigned int v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_BFu8i_BFu31ll) C1{ Fs:9 Fi:8 FL:31}



static void Test_BFu9s_BFu8i_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu8i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 1, 31, 1, "BFu9s_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu8i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu31ll, BFu9s_BFu8i_BFu31ll)
//============================================================================


struct  BFu9s_BFu8i_BFu32i  {
  unsigned short v1:9;
  unsigned int v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu9s_BFu8i_BFu32i) C1{ Fs:9 Fi:8 Fi:32}



static void Test_BFu9s_BFu8i_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu32i");
    static STRUCT_IF_C BFu9s_BFu8i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu8i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu32i, BFu9s_BFu8i_BFu32i)
//============================================================================


struct  BFu9s_BFu8i_BFu32ll  {
  unsigned short v1:9;
  unsigned int v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_BFu8i_BFu32ll) C1{ Fs:9 Fi:8 FL:32}



static void Test_BFu9s_BFu8i_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu8i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 1, 32, 1, "BFu9s_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu8i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu32ll, BFu9s_BFu8i_BFu32ll)
//============================================================================


struct  BFu9s_BFu8i_BFu33  {
  unsigned short v1:9;
  unsigned int v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_BFu8i_BFu33) C1{ Fs:9 Fi:8 FL:33}



static void Test_BFu9s_BFu8i_BFu33()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu33");
    static STRUCT_IF_C BFu9s_BFu8i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu33");
    set_bf_and_test(lv, v3, 2, 1, 33, 1, "BFu9s_BFu8i_BFu33");
    set_bf_and_test(lv, v3, 2, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu8i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu33, BFu9s_BFu8i_BFu33)
//============================================================================


struct  BFu9s_BFu8i_BFu7c  {
  unsigned short v1:9;
  unsigned int v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu9s_BFu8i_BFu7c) C1{ Fs:9 Fi:8 Fc:7}



static void Test_BFu9s_BFu8i_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu7c");
    static STRUCT_IF_C BFu9s_BFu8i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "BFu9s_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu8i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu7c, BFu9s_BFu8i_BFu7c)
//============================================================================


struct  BFu9s_BFu8i_BFu7i  {
  unsigned short v1:9;
  unsigned int v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu9s_BFu8i_BFu7i) C1{ Fs:9 Fi:8 Fi:7}



static void Test_BFu9s_BFu8i_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu7i");
    static STRUCT_IF_C BFu9s_BFu8i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "BFu9s_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu8i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu7i, BFu9s_BFu8i_BFu7i)
//============================================================================


struct  BFu9s_BFu8i_BFu7ll  {
  unsigned short v1:9;
  unsigned int v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_BFu8i_BFu7ll) C1{ Fs:9 Fi:8 FL:7}



static void Test_BFu9s_BFu8i_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu8i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "BFu9s_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu8i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu7ll, BFu9s_BFu8i_BFu7ll)
//============================================================================


struct  BFu9s_BFu8i_BFu7s  {
  unsigned short v1:9;
  unsigned int v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu9s_BFu8i_BFu7s) C1{ Fs:9 Fi:8 Fs:7}



static void Test_BFu9s_BFu8i_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu7s");
    static STRUCT_IF_C BFu9s_BFu8i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "BFu9s_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu8i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu7s, BFu9s_BFu8i_BFu7s)
//============================================================================


struct  BFu9s_BFu8i_BFu8c  {
  unsigned short v1:9;
  unsigned int v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu9s_BFu8i_BFu8c) C1{ Fs:9 Fi:8 Fc:8}



static void Test_BFu9s_BFu8i_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu8c");
    static STRUCT_IF_C BFu9s_BFu8i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu9s_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu8c, BFu9s_BFu8i_BFu8c)
//============================================================================


struct  BFu9s_BFu8i_BFu8i  {
  unsigned short v1:9;
  unsigned int v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu9s_BFu8i_BFu8i) C1{ Fs:9 Fi:8 Fi:8}



static void Test_BFu9s_BFu8i_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu8i");
    static STRUCT_IF_C BFu9s_BFu8i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "BFu9s_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu8i, BFu9s_BFu8i_BFu8i)
//============================================================================


struct  BFu9s_BFu8i_BFu8ll  {
  unsigned short v1:9;
  unsigned int v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_BFu8i_BFu8ll) C1{ Fs:9 Fi:8 FL:8}



static void Test_BFu9s_BFu8i_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu8i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "BFu9s_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu8ll, BFu9s_BFu8i_BFu8ll)
//============================================================================


struct  BFu9s_BFu8i_BFu8s  {
  unsigned short v1:9;
  unsigned int v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu9s_BFu8i_BFu8s) C1{ Fs:9 Fi:8 Fs:8}



static void Test_BFu9s_BFu8i_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu8s");
    static STRUCT_IF_C BFu9s_BFu8i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "BFu9s_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu8s, BFu9s_BFu8i_BFu8s)
//============================================================================


struct  BFu9s_BFu8i_BFu9i  {
  unsigned short v1:9;
  unsigned int v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFu8i_BFu9i) C1{ Fs:9 Fi:8 Fi:9}



static void Test_BFu9s_BFu8i_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu9i");
    static STRUCT_IF_C BFu9s_BFu8i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "BFu9s_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu9i, BFu9s_BFu8i_BFu9i)
//============================================================================


struct  BFu9s_BFu8i_BFu9ll  {
  unsigned short v1:9;
  unsigned int v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFu8i_BFu9ll) C1{ Fs:9 Fi:8 FL:9}



static void Test_BFu9s_BFu8i_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu8i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "BFu9s_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu9ll, BFu9s_BFu8i_BFu9ll)
//============================================================================


struct  BFu9s_BFu8i_BFu9s  {
  unsigned short v1:9;
  unsigned int v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFu8i_BFu9s) C1{ Fs:9 Fi:8 Fs:9}



static void Test_BFu9s_BFu8i_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu9s");
    static STRUCT_IF_C BFu9s_BFu8i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "BFu9s_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu9s, BFu9s_BFu8i_BFu9s)
//============================================================================


struct  BFu9s_BFu8i_C  {
  unsigned short v1:9;
  unsigned int v2:8;
  char v3;
};
//SIG(1 BFu9s_BFu8i_C) C1{ Fs:9 Fi:8 Fc}



static void Test_BFu9s_BFu8i_C()
{
  {
    init_simple_test("BFu9s_BFu8i_C");
    static STRUCT_IF_C BFu9s_BFu8i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_C");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_C");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_C");
    check_field_offset(lv, v3, 3, "BFu9s_BFu8i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_C, BFu9s_BFu8i_C)
//============================================================================


struct  BFu9s_BFu8i_D  {
  unsigned short v1:9;
  unsigned int v2:8;
  double v3;
};
//SIG(1 BFu9s_BFu8i_D) C1{ Fs:9 Fi:8 FL}



static void Test_BFu9s_BFu8i_D()
{
  {
    init_simple_test("BFu9s_BFu8i_D");
    static STRUCT_IF_C BFu9s_BFu8i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu8i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8i_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_D");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_D");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu8i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_D, BFu9s_BFu8i_D)
//============================================================================


struct  BFu9s_BFu8i_F  {
  unsigned short v1:9;
  unsigned int v2:8;
  float v3;
};
//SIG(1 BFu9s_BFu8i_F) C1{ Fs:9 Fi:8 Fi}



static void Test_BFu9s_BFu8i_F()
{
  {
    init_simple_test("BFu9s_BFu8i_F");
    static STRUCT_IF_C BFu9s_BFu8i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_F");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_F");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_F");
    check_field_offset(lv, v3, 4, "BFu9s_BFu8i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_F, BFu9s_BFu8i_F)
//============================================================================


struct  BFu9s_BFu8i_I  {
  unsigned short v1:9;
  unsigned int v2:8;
  int v3;
};
//SIG(1 BFu9s_BFu8i_I) C1{ Fs:9 Fi:8 Fi}



static void Test_BFu9s_BFu8i_I()
{
  {
    init_simple_test("BFu9s_BFu8i_I");
    static STRUCT_IF_C BFu9s_BFu8i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_I");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_I");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_I");
    check_field_offset(lv, v3, 4, "BFu9s_BFu8i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_I, BFu9s_BFu8i_I)
//============================================================================


struct  BFu9s_BFu8i_Ip  {
  unsigned short v1:9;
  unsigned int v2:8;
  int *v3;
};
//SIG(1 BFu9s_BFu8i_Ip) C1{ Fs:9 Fi:8 Fp}



static void Test_BFu9s_BFu8i_Ip()
{
  {
    init_simple_test("BFu9s_BFu8i_Ip");
    static STRUCT_IF_C BFu9s_BFu8i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu8i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_Ip");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_Ip");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu8i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_Ip, BFu9s_BFu8i_Ip)
//============================================================================


struct  BFu9s_BFu8i_L  {
  unsigned short v1:9;
  unsigned int v2:8;
  __tsi64 v3;
};
//SIG(1 BFu9s_BFu8i_L) C1{ Fs:9 Fi:8 FL}



static void Test_BFu9s_BFu8i_L()
{
  {
    init_simple_test("BFu9s_BFu8i_L");
    static STRUCT_IF_C BFu9s_BFu8i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu8i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8i_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_L");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_L");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu8i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_L, BFu9s_BFu8i_L)
//============================================================================


struct  BFu9s_BFu8i_S  {
  unsigned short v1:9;
  unsigned int v2:8;
  short v3;
};
//SIG(1 BFu9s_BFu8i_S) C1{ Fs:9 Fi:8 Fs}



static void Test_BFu9s_BFu8i_S()
{
  {
    init_simple_test("BFu9s_BFu8i_S");
    static STRUCT_IF_C BFu9s_BFu8i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_S");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_S");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_S");
    check_field_offset(lv, v3, 4, "BFu9s_BFu8i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_S, BFu9s_BFu8i_S)
//============================================================================


struct  BFu9s_BFu8i_Uc  {
  unsigned short v1:9;
  unsigned int v2:8;
  unsigned char v3;
};
//SIG(1 BFu9s_BFu8i_Uc) C1{ Fs:9 Fi:8 Fc}



static void Test_BFu9s_BFu8i_Uc()
{
  {
    init_simple_test("BFu9s_BFu8i_Uc");
    static STRUCT_IF_C BFu9s_BFu8i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_Uc");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_Uc");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_Uc");
    check_field_offset(lv, v3, 3, "BFu9s_BFu8i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_Uc, BFu9s_BFu8i_Uc)
//============================================================================


struct  BFu9s_BFu8i_Ui  {
  unsigned short v1:9;
  unsigned int v2:8;
  unsigned int v3;
};
//SIG(1 BFu9s_BFu8i_Ui) C1{ Fs:9 Fi:8 Fi}



static void Test_BFu9s_BFu8i_Ui()
{
  {
    init_simple_test("BFu9s_BFu8i_Ui");
    static STRUCT_IF_C BFu9s_BFu8i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_Ui");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_Ui");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_Ui");
    check_field_offset(lv, v3, 4, "BFu9s_BFu8i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_Ui, BFu9s_BFu8i_Ui)
//============================================================================


struct  BFu9s_BFu8i_Ul  {
  unsigned short v1:9;
  unsigned int v2:8;
  __tsu64 v3;
};
//SIG(1 BFu9s_BFu8i_Ul) C1{ Fs:9 Fi:8 FL}



static void Test_BFu9s_BFu8i_Ul()
{
  {
    init_simple_test("BFu9s_BFu8i_Ul");
    static STRUCT_IF_C BFu9s_BFu8i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu8i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_Ul");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_Ul");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu8i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_Ul, BFu9s_BFu8i_Ul)
//============================================================================


struct  BFu9s_BFu8i_Us  {
  unsigned short v1:9;
  unsigned int v2:8;
  unsigned short v3;
};
//SIG(1 BFu9s_BFu8i_Us) C1{ Fs:9 Fi:8 Fs}



static void Test_BFu9s_BFu8i_Us()
{
  {
    init_simple_test("BFu9s_BFu8i_Us");
    static STRUCT_IF_C BFu9s_BFu8i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_Us");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_Us");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_Us");
    check_field_offset(lv, v3, 4, "BFu9s_BFu8i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_Us, BFu9s_BFu8i_Us)
//============================================================================


struct  BFu9s_BFu8i_Vp  {
  unsigned short v1:9;
  unsigned int v2:8;
  void *v3;
};
//SIG(1 BFu9s_BFu8i_Vp) C1{ Fs:9 Fi:8 Fp}



static void Test_BFu9s_BFu8i_Vp()
{
  {
    init_simple_test("BFu9s_BFu8i_Vp");
    static STRUCT_IF_C BFu9s_BFu8i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu8i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_Vp");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_Vp");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu8i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_Vp, BFu9s_BFu8i_Vp)
//============================================================================


struct  BFu9s_BFu8ll  {
  unsigned short v1:9;
  __tsu64 v2:8;
};
//SIG(1 BFu9s_BFu8ll) C1{ Fs:9 FL:8}



static void Test_BFu9s_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll, BFu9s_BFu8ll)
//============================================================================


struct  BFu9s_BFu8ll_BFu15i  {
  unsigned short v1:9;
  __tsu64 v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu9s_BFu8ll_BFu15i) C1{ Fs:9 FL:8 Fi:15}



static void Test_BFu9s_BFu8ll_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu15i");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "BFu9s_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu8ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu15i, BFu9s_BFu8ll_BFu15i)
//============================================================================


struct  BFu9s_BFu8ll_BFu15ll  {
  unsigned short v1:9;
  __tsu64 v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_BFu8ll_BFu15ll) C1{ Fs:9 FL:8 FL:15}



static void Test_BFu9s_BFu8ll_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "BFu9s_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu8ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu15ll, BFu9s_BFu8ll_BFu15ll)
//============================================================================


struct  BFu9s_BFu8ll_BFu15s  {
  unsigned short v1:9;
  __tsu64 v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu9s_BFu8ll_BFu15s) C1{ Fs:9 FL:8 Fs:15}



static void Test_BFu9s_BFu8ll_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu15s");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "BFu9s_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu8ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu15s, BFu9s_BFu8ll_BFu15s)
//============================================================================


struct  BFu9s_BFu8ll_BFu16i  {
  unsigned short v1:9;
  __tsu64 v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu9s_BFu8ll_BFu16i) C1{ Fs:9 FL:8 Fi:16}



static void Test_BFu9s_BFu8ll_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu16i");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu8ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu16i, BFu9s_BFu8ll_BFu16i)
//============================================================================


struct  BFu9s_BFu8ll_BFu16ll  {
  unsigned short v1:9;
  __tsu64 v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_BFu8ll_BFu16ll) C1{ Fs:9 FL:8 FL:16}



static void Test_BFu9s_BFu8ll_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 1, 16, 1, "BFu9s_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu8ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu16ll, BFu9s_BFu8ll_BFu16ll)
//============================================================================


struct  BFu9s_BFu8ll_BFu16s  {
  unsigned short v1:9;
  __tsu64 v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu9s_BFu8ll_BFu16s) C1{ Fs:9 FL:8 Fs:16}



static void Test_BFu9s_BFu8ll_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu16s");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu8ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu16s, BFu9s_BFu8ll_BFu16s)
//============================================================================


struct  BFu9s_BFu8ll_BFu17i  {
  unsigned short v1:9;
  __tsu64 v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu9s_BFu8ll_BFu17i) C1{ Fs:9 FL:8 Fi:17}



static void Test_BFu9s_BFu8ll_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu17i");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu9s_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu8ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu17i, BFu9s_BFu8ll_BFu17i)
//============================================================================


struct  BFu9s_BFu8ll_BFu17ll  {
  unsigned short v1:9;
  __tsu64 v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_BFu8ll_BFu17ll) C1{ Fs:9 FL:8 FL:17}



static void Test_BFu9s_BFu8ll_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 1, 17, 1, "BFu9s_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu8ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu17ll, BFu9s_BFu8ll_BFu17ll)
//============================================================================


struct  BFu9s_BFu8ll_BFu1c  {
  unsigned short v1:9;
  __tsu64 v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu9s_BFu8ll_BFu1c) C1{ Fs:9 FL:8 Fc:1}



static void Test_BFu9s_BFu8ll_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu1c");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu1c");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "BFu9s_BFu8ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu1c, BFu9s_BFu8ll_BFu1c)
//============================================================================


struct  BFu9s_BFu8ll_BFu1i  {
  unsigned short v1:9;
  __tsu64 v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu9s_BFu8ll_BFu1i) C1{ Fs:9 FL:8 Fi:1}



static void Test_BFu9s_BFu8ll_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu1i");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu1i");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "BFu9s_BFu8ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu1i, BFu9s_BFu8ll_BFu1i)
//============================================================================


struct  BFu9s_BFu8ll_BFu1ll  {
  unsigned short v1:9;
  __tsu64 v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_BFu8ll_BFu1ll) C1{ Fs:9 FL:8 FL:1}



static void Test_BFu9s_BFu8ll_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "BFu9s_BFu8ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu1ll, BFu9s_BFu8ll_BFu1ll)
//============================================================================


struct  BFu9s_BFu8ll_BFu1s  {
  unsigned short v1:9;
  __tsu64 v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu9s_BFu8ll_BFu1s) C1{ Fs:9 FL:8 Fs:1}



static void Test_BFu9s_BFu8ll_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu1s");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu1s");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "BFu9s_BFu8ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu1s, BFu9s_BFu8ll_BFu1s)
//============================================================================


struct  BFu9s_BFu8ll_BFu31i  {
  unsigned short v1:9;
  __tsu64 v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu9s_BFu8ll_BFu31i) C1{ Fs:9 FL:8 Fi:31}



static void Test_BFu9s_BFu8ll_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu31i");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu8ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu31i, BFu9s_BFu8ll_BFu31i)
//============================================================================


struct  BFu9s_BFu8ll_BFu31ll  {
  unsigned short v1:9;
  __tsu64 v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_BFu8ll_BFu31ll) C1{ Fs:9 FL:8 FL:31}



static void Test_BFu9s_BFu8ll_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 1, 31, 1, "BFu9s_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu8ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu31ll, BFu9s_BFu8ll_BFu31ll)
//============================================================================


struct  BFu9s_BFu8ll_BFu32i  {
  unsigned short v1:9;
  __tsu64 v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu9s_BFu8ll_BFu32i) C1{ Fs:9 FL:8 Fi:32}



static void Test_BFu9s_BFu8ll_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu32i");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu8ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu32i, BFu9s_BFu8ll_BFu32i)
//============================================================================


struct  BFu9s_BFu8ll_BFu32ll  {
  unsigned short v1:9;
  __tsu64 v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_BFu8ll_BFu32ll) C1{ Fs:9 FL:8 FL:32}



static void Test_BFu9s_BFu8ll_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 1, 32, 1, "BFu9s_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu8ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu32ll, BFu9s_BFu8ll_BFu32ll)
//============================================================================


struct  BFu9s_BFu8ll_BFu33  {
  unsigned short v1:9;
  __tsu64 v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_BFu8ll_BFu33) C1{ Fs:9 FL:8 FL:33}



static void Test_BFu9s_BFu8ll_BFu33()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu33");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, 2, 1, 33, 1, "BFu9s_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, 2, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu8ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu33, BFu9s_BFu8ll_BFu33)
//============================================================================


struct  BFu9s_BFu8ll_BFu7c  {
  unsigned short v1:9;
  __tsu64 v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu9s_BFu8ll_BFu7c) C1{ Fs:9 FL:8 Fc:7}



static void Test_BFu9s_BFu8ll_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu7c");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "BFu9s_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu8ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu7c, BFu9s_BFu8ll_BFu7c)
//============================================================================


struct  BFu9s_BFu8ll_BFu7i  {
  unsigned short v1:9;
  __tsu64 v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu9s_BFu8ll_BFu7i) C1{ Fs:9 FL:8 Fi:7}



static void Test_BFu9s_BFu8ll_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu7i");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "BFu9s_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu8ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu7i, BFu9s_BFu8ll_BFu7i)
//============================================================================


struct  BFu9s_BFu8ll_BFu7ll  {
  unsigned short v1:9;
  __tsu64 v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_BFu8ll_BFu7ll) C1{ Fs:9 FL:8 FL:7}



static void Test_BFu9s_BFu8ll_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "BFu9s_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu8ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu7ll, BFu9s_BFu8ll_BFu7ll)
//============================================================================


struct  BFu9s_BFu8ll_BFu7s  {
  unsigned short v1:9;
  __tsu64 v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu9s_BFu8ll_BFu7s) C1{ Fs:9 FL:8 Fs:7}



static void Test_BFu9s_BFu8ll_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu7s");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "BFu9s_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu8ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu7s, BFu9s_BFu8ll_BFu7s)
//============================================================================


struct  BFu9s_BFu8ll_BFu8c  {
  unsigned short v1:9;
  __tsu64 v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu9s_BFu8ll_BFu8c) C1{ Fs:9 FL:8 Fc:8}



static void Test_BFu9s_BFu8ll_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu8c");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu9s_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu8c, BFu9s_BFu8ll_BFu8c)
//============================================================================


struct  BFu9s_BFu8ll_BFu8i  {
  unsigned short v1:9;
  __tsu64 v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu9s_BFu8ll_BFu8i) C1{ Fs:9 FL:8 Fi:8}



static void Test_BFu9s_BFu8ll_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu8i");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "BFu9s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu8i, BFu9s_BFu8ll_BFu8i)
//============================================================================


struct  BFu9s_BFu8ll_BFu8ll  {
  unsigned short v1:9;
  __tsu64 v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_BFu8ll_BFu8ll) C1{ Fs:9 FL:8 FL:8}



static void Test_BFu9s_BFu8ll_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "BFu9s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu8ll, BFu9s_BFu8ll_BFu8ll)
//============================================================================


struct  BFu9s_BFu8ll_BFu8s  {
  unsigned short v1:9;
  __tsu64 v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu9s_BFu8ll_BFu8s) C1{ Fs:9 FL:8 Fs:8}



static void Test_BFu9s_BFu8ll_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu8s");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "BFu9s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu8s, BFu9s_BFu8ll_BFu8s)
//============================================================================


struct  BFu9s_BFu8ll_BFu9i  {
  unsigned short v1:9;
  __tsu64 v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFu8ll_BFu9i) C1{ Fs:9 FL:8 Fi:9}



static void Test_BFu9s_BFu8ll_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu9i");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "BFu9s_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu9i, BFu9s_BFu8ll_BFu9i)
//============================================================================


struct  BFu9s_BFu8ll_BFu9ll  {
  unsigned short v1:9;
  __tsu64 v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFu8ll_BFu9ll) C1{ Fs:9 FL:8 FL:9}



static void Test_BFu9s_BFu8ll_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "BFu9s_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu9ll, BFu9s_BFu8ll_BFu9ll)
//============================================================================


struct  BFu9s_BFu8ll_BFu9s  {
  unsigned short v1:9;
  __tsu64 v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFu8ll_BFu9s) C1{ Fs:9 FL:8 Fs:9}



static void Test_BFu9s_BFu8ll_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu9s");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "BFu9s_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu9s, BFu9s_BFu8ll_BFu9s)
//============================================================================


struct  BFu9s_BFu8ll_C  {
  unsigned short v1:9;
  __tsu64 v2:8;
  char v3;
};
//SIG(1 BFu9s_BFu8ll_C) C1{ Fs:9 FL:8 Fc}



static void Test_BFu9s_BFu8ll_C()
{
  {
    init_simple_test("BFu9s_BFu8ll_C");
    static STRUCT_IF_C BFu9s_BFu8ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_C");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_C");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_C");
    check_field_offset(lv, v3, 3, "BFu9s_BFu8ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_C, BFu9s_BFu8ll_C)
//============================================================================


struct  BFu9s_BFu8ll_D  {
  unsigned short v1:9;
  __tsu64 v2:8;
  double v3;
};
//SIG(1 BFu9s_BFu8ll_D) C1{ Fs:9 FL:8 FL}



static void Test_BFu9s_BFu8ll_D()
{
  {
    init_simple_test("BFu9s_BFu8ll_D");
    static STRUCT_IF_C BFu9s_BFu8ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu8ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_D");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_D");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu8ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_D, BFu9s_BFu8ll_D)
//============================================================================


struct  BFu9s_BFu8ll_F  {
  unsigned short v1:9;
  __tsu64 v2:8;
  float v3;
};
//SIG(1 BFu9s_BFu8ll_F) C1{ Fs:9 FL:8 Fi}



static void Test_BFu9s_BFu8ll_F()
{
  {
    init_simple_test("BFu9s_BFu8ll_F");
    static STRUCT_IF_C BFu9s_BFu8ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_F");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_F");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_F");
    check_field_offset(lv, v3, 4, "BFu9s_BFu8ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_F, BFu9s_BFu8ll_F)
//============================================================================


struct  BFu9s_BFu8ll_I  {
  unsigned short v1:9;
  __tsu64 v2:8;
  int v3;
};
//SIG(1 BFu9s_BFu8ll_I) C1{ Fs:9 FL:8 Fi}



static void Test_BFu9s_BFu8ll_I()
{
  {
    init_simple_test("BFu9s_BFu8ll_I");
    static STRUCT_IF_C BFu9s_BFu8ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_I");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_I");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_I");
    check_field_offset(lv, v3, 4, "BFu9s_BFu8ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_I, BFu9s_BFu8ll_I)
//============================================================================


struct  BFu9s_BFu8ll_Ip  {
  unsigned short v1:9;
  __tsu64 v2:8;
  int *v3;
};
//SIG(1 BFu9s_BFu8ll_Ip) C1{ Fs:9 FL:8 Fp}



static void Test_BFu9s_BFu8ll_Ip()
{
  {
    init_simple_test("BFu9s_BFu8ll_Ip");
    static STRUCT_IF_C BFu9s_BFu8ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu8ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_Ip");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_Ip");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu8ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_Ip, BFu9s_BFu8ll_Ip)
//============================================================================


struct  BFu9s_BFu8ll_L  {
  unsigned short v1:9;
  __tsu64 v2:8;
  __tsi64 v3;
};
//SIG(1 BFu9s_BFu8ll_L) C1{ Fs:9 FL:8 FL}



static void Test_BFu9s_BFu8ll_L()
{
  {
    init_simple_test("BFu9s_BFu8ll_L");
    static STRUCT_IF_C BFu9s_BFu8ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu8ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_L");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_L");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu8ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_L, BFu9s_BFu8ll_L)
//============================================================================


struct  BFu9s_BFu8ll_S  {
  unsigned short v1:9;
  __tsu64 v2:8;
  short v3;
};
//SIG(1 BFu9s_BFu8ll_S) C1{ Fs:9 FL:8 Fs}



static void Test_BFu9s_BFu8ll_S()
{
  {
    init_simple_test("BFu9s_BFu8ll_S");
    static STRUCT_IF_C BFu9s_BFu8ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_S");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_S");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_S");
    check_field_offset(lv, v3, 4, "BFu9s_BFu8ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_S, BFu9s_BFu8ll_S)
//============================================================================


struct  BFu9s_BFu8ll_Uc  {
  unsigned short v1:9;
  __tsu64 v2:8;
  unsigned char v3;
};
//SIG(1 BFu9s_BFu8ll_Uc) C1{ Fs:9 FL:8 Fc}



static void Test_BFu9s_BFu8ll_Uc()
{
  {
    init_simple_test("BFu9s_BFu8ll_Uc");
    static STRUCT_IF_C BFu9s_BFu8ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_Uc");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_Uc");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_Uc");
    check_field_offset(lv, v3, 3, "BFu9s_BFu8ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_Uc, BFu9s_BFu8ll_Uc)
//============================================================================


struct  BFu9s_BFu8ll_Ui  {
  unsigned short v1:9;
  __tsu64 v2:8;
  unsigned int v3;
};
//SIG(1 BFu9s_BFu8ll_Ui) C1{ Fs:9 FL:8 Fi}



static void Test_BFu9s_BFu8ll_Ui()
{
  {
    init_simple_test("BFu9s_BFu8ll_Ui");
    static STRUCT_IF_C BFu9s_BFu8ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_Ui");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_Ui");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_Ui");
    check_field_offset(lv, v3, 4, "BFu9s_BFu8ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_Ui, BFu9s_BFu8ll_Ui)
//============================================================================


struct  BFu9s_BFu8ll_Ul  {
  unsigned short v1:9;
  __tsu64 v2:8;
  __tsu64 v3;
};
//SIG(1 BFu9s_BFu8ll_Ul) C1{ Fs:9 FL:8 FL}



static void Test_BFu9s_BFu8ll_Ul()
{
  {
    init_simple_test("BFu9s_BFu8ll_Ul");
    static STRUCT_IF_C BFu9s_BFu8ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu8ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_Ul");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_Ul");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu8ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_Ul, BFu9s_BFu8ll_Ul)
//============================================================================


struct  BFu9s_BFu8ll_Us  {
  unsigned short v1:9;
  __tsu64 v2:8;
  unsigned short v3;
};
//SIG(1 BFu9s_BFu8ll_Us) C1{ Fs:9 FL:8 Fs}



static void Test_BFu9s_BFu8ll_Us()
{
  {
    init_simple_test("BFu9s_BFu8ll_Us");
    static STRUCT_IF_C BFu9s_BFu8ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_Us");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_Us");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_Us");
    check_field_offset(lv, v3, 4, "BFu9s_BFu8ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_Us, BFu9s_BFu8ll_Us)
//============================================================================


struct  BFu9s_BFu8ll_Vp  {
  unsigned short v1:9;
  __tsu64 v2:8;
  void *v3;
};
//SIG(1 BFu9s_BFu8ll_Vp) C1{ Fs:9 FL:8 Fp}



static void Test_BFu9s_BFu8ll_Vp()
{
  {
    init_simple_test("BFu9s_BFu8ll_Vp");
    static STRUCT_IF_C BFu9s_BFu8ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu8ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_Vp");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_Vp");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu8ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_Vp, BFu9s_BFu8ll_Vp)
//============================================================================


struct  BFu9s_BFu8s  {
  unsigned short v1:9;
  unsigned short v2:8;
};
//SIG(1 BFu9s_BFu8s) C1{ Fs:9 Fs:8}



static void Test_BFu9s_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu8s");
    static STRUCT_IF_C BFu9s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s, BFu9s_BFu8s)
//============================================================================


struct  BFu9s_BFu8s_BFu15i  {
  unsigned short v1:9;
  unsigned short v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu9s_BFu8s_BFu15i) C1{ Fs:9 Fs:8 Fi:15}



static void Test_BFu9s_BFu8s_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu15i");
    static STRUCT_IF_C BFu9s_BFu8s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu8s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu15i, BFu9s_BFu8s_BFu15i)
//============================================================================


struct  BFu9s_BFu8s_BFu15ll  {
  unsigned short v1:9;
  unsigned short v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_BFu8s_BFu15ll) C1{ Fs:9 Fs:8 FL:15}



static void Test_BFu9s_BFu8s_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu8s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu9s_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu8s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu15ll, BFu9s_BFu8s_BFu15ll)
//============================================================================


struct  BFu9s_BFu8s_BFu15s  {
  unsigned short v1:9;
  unsigned short v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu9s_BFu8s_BFu15s) C1{ Fs:9 Fs:8 Fs:15}



static void Test_BFu9s_BFu8s_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu15s");
    static STRUCT_IF_C BFu9s_BFu8s_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu8s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu8s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu15s, BFu9s_BFu8s_BFu15s)
//============================================================================


struct  BFu9s_BFu8s_BFu16i  {
  unsigned short v1:9;
  unsigned short v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu9s_BFu8s_BFu16i) C1{ Fs:9 Fs:8 Fi:16}



static void Test_BFu9s_BFu8s_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu16i");
    static STRUCT_IF_C BFu9s_BFu8s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu8s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu16i, BFu9s_BFu8s_BFu16i)
//============================================================================


struct  BFu9s_BFu8s_BFu16ll  {
  unsigned short v1:9;
  unsigned short v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_BFu8s_BFu16ll) C1{ Fs:9 Fs:8 FL:16}



static void Test_BFu9s_BFu8s_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu8s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu9s_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu8s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu16ll, BFu9s_BFu8s_BFu16ll)
//============================================================================


struct  BFu9s_BFu8s_BFu16s  {
  unsigned short v1:9;
  unsigned short v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu9s_BFu8s_BFu16s) C1{ Fs:9 Fs:8 Fs:16}



static void Test_BFu9s_BFu8s_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu16s");
    static STRUCT_IF_C BFu9s_BFu8s_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu8s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu8s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu16s, BFu9s_BFu8s_BFu16s)
//============================================================================


struct  BFu9s_BFu8s_BFu17i  {
  unsigned short v1:9;
  unsigned short v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu9s_BFu8s_BFu17i) C1{ Fs:9 Fs:8 Fi:17}



static void Test_BFu9s_BFu8s_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu17i");
    static STRUCT_IF_C BFu9s_BFu8s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu9s_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu8s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu17i, BFu9s_BFu8s_BFu17i)
//============================================================================


struct  BFu9s_BFu8s_BFu17ll  {
  unsigned short v1:9;
  unsigned short v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_BFu8s_BFu17ll) C1{ Fs:9 Fs:8 FL:17}



static void Test_BFu9s_BFu8s_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu8s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu9s_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu8s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu17ll, BFu9s_BFu8s_BFu17ll)
//============================================================================


struct  BFu9s_BFu8s_BFu1c  {
  unsigned short v1:9;
  unsigned short v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu9s_BFu8s_BFu1c) C1{ Fs:9 Fs:8 Fc:1}



static void Test_BFu9s_BFu8s_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu1c");
    static STRUCT_IF_C BFu9s_BFu8s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu9s_BFu8s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu1c, BFu9s_BFu8s_BFu1c)
//============================================================================


struct  BFu9s_BFu8s_BFu1i  {
  unsigned short v1:9;
  unsigned short v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu9s_BFu8s_BFu1i) C1{ Fs:9 Fs:8 Fi:1}



static void Test_BFu9s_BFu8s_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu1i");
    static STRUCT_IF_C BFu9s_BFu8s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu9s_BFu8s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu1i, BFu9s_BFu8s_BFu1i)
//============================================================================


struct  BFu9s_BFu8s_BFu1ll  {
  unsigned short v1:9;
  unsigned short v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_BFu8s_BFu1ll) C1{ Fs:9 Fs:8 FL:1}



static void Test_BFu9s_BFu8s_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu8s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu9s_BFu8s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu1ll, BFu9s_BFu8s_BFu1ll)
//============================================================================


struct  BFu9s_BFu8s_BFu1s  {
  unsigned short v1:9;
  unsigned short v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu9s_BFu8s_BFu1s) C1{ Fs:9 Fs:8 Fs:1}



static void Test_BFu9s_BFu8s_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu1s");
    static STRUCT_IF_C BFu9s_BFu8s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu9s_BFu8s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu1s, BFu9s_BFu8s_BFu1s)
//============================================================================


struct  BFu9s_BFu8s_BFu31i  {
  unsigned short v1:9;
  unsigned short v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu9s_BFu8s_BFu31i) C1{ Fs:9 Fs:8 Fi:31}



static void Test_BFu9s_BFu8s_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu31i");
    static STRUCT_IF_C BFu9s_BFu8s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu8s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu31i, BFu9s_BFu8s_BFu31i)
//============================================================================


struct  BFu9s_BFu8s_BFu31ll  {
  unsigned short v1:9;
  unsigned short v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_BFu8s_BFu31ll) C1{ Fs:9 Fs:8 FL:31}



static void Test_BFu9s_BFu8s_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu8s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu9s_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu8s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu31ll, BFu9s_BFu8s_BFu31ll)
//============================================================================


struct  BFu9s_BFu8s_BFu32i  {
  unsigned short v1:9;
  unsigned short v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu9s_BFu8s_BFu32i) C1{ Fs:9 Fs:8 Fi:32}



static void Test_BFu9s_BFu8s_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu32i");
    static STRUCT_IF_C BFu9s_BFu8s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu8s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu32i, BFu9s_BFu8s_BFu32i)
//============================================================================


struct  BFu9s_BFu8s_BFu32ll  {
  unsigned short v1:9;
  unsigned short v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_BFu8s_BFu32ll) C1{ Fs:9 Fs:8 FL:32}



static void Test_BFu9s_BFu8s_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu8s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu9s_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu8s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu32ll, BFu9s_BFu8s_BFu32ll)
//============================================================================


struct  BFu9s_BFu8s_BFu33  {
  unsigned short v1:9;
  unsigned short v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_BFu8s_BFu33) C1{ Fs:9 Fs:8 FL:33}



static void Test_BFu9s_BFu8s_BFu33()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu33");
    static STRUCT_IF_C BFu9s_BFu8s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu9s_BFu8s_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu9s_BFu8s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu33, BFu9s_BFu8s_BFu33)
//============================================================================


struct  BFu9s_BFu8s_BFu7c  {
  unsigned short v1:9;
  unsigned short v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu9s_BFu8s_BFu7c) C1{ Fs:9 Fs:8 Fc:7}



static void Test_BFu9s_BFu8s_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu7c");
    static STRUCT_IF_C BFu9s_BFu8s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu9s_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu8s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu7c, BFu9s_BFu8s_BFu7c)
//============================================================================


struct  BFu9s_BFu8s_BFu7i  {
  unsigned short v1:9;
  unsigned short v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu9s_BFu8s_BFu7i) C1{ Fs:9 Fs:8 Fi:7}



static void Test_BFu9s_BFu8s_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu7i");
    static STRUCT_IF_C BFu9s_BFu8s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu9s_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu8s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu7i, BFu9s_BFu8s_BFu7i)
//============================================================================


struct  BFu9s_BFu8s_BFu7ll  {
  unsigned short v1:9;
  unsigned short v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_BFu8s_BFu7ll) C1{ Fs:9 Fs:8 FL:7}



static void Test_BFu9s_BFu8s_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu8s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu9s_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu8s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu7ll, BFu9s_BFu8s_BFu7ll)
//============================================================================


struct  BFu9s_BFu8s_BFu7s  {
  unsigned short v1:9;
  unsigned short v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu9s_BFu8s_BFu7s) C1{ Fs:9 Fs:8 Fs:7}



static void Test_BFu9s_BFu8s_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu7s");
    static STRUCT_IF_C BFu9s_BFu8s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu9s_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu8s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu7s, BFu9s_BFu8s_BFu7s)
//============================================================================


struct  BFu9s_BFu8s_BFu8c  {
  unsigned short v1:9;
  unsigned short v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu9s_BFu8s_BFu8c) C1{ Fs:9 Fs:8 Fc:8}



static void Test_BFu9s_BFu8s_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu8c");
    static STRUCT_IF_C BFu9s_BFu8s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu9s_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu8c, BFu9s_BFu8s_BFu8c)
//============================================================================


struct  BFu9s_BFu8s_BFu8i  {
  unsigned short v1:9;
  unsigned short v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu9s_BFu8s_BFu8i) C1{ Fs:9 Fs:8 Fi:8}



static void Test_BFu9s_BFu8s_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu8i");
    static STRUCT_IF_C BFu9s_BFu8s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu9s_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu8i, BFu9s_BFu8s_BFu8i)
//============================================================================


struct  BFu9s_BFu8s_BFu8ll  {
  unsigned short v1:9;
  unsigned short v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_BFu8s_BFu8ll) C1{ Fs:9 Fs:8 FL:8}



static void Test_BFu9s_BFu8s_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu8s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu9s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu8ll, BFu9s_BFu8s_BFu8ll)
//============================================================================


struct  BFu9s_BFu8s_BFu8s  {
  unsigned short v1:9;
  unsigned short v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu9s_BFu8s_BFu8s) C1{ Fs:9 Fs:8 Fs:8}



static void Test_BFu9s_BFu8s_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu8s");
    static STRUCT_IF_C BFu9s_BFu8s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu9s_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu8s, BFu9s_BFu8s_BFu8s)
//============================================================================


struct  BFu9s_BFu8s_BFu9i  {
  unsigned short v1:9;
  unsigned short v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFu8s_BFu9i) C1{ Fs:9 Fs:8 Fi:9}



static void Test_BFu9s_BFu8s_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu9i");
    static STRUCT_IF_C BFu9s_BFu8s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu9i, BFu9s_BFu8s_BFu9i)
//============================================================================


struct  BFu9s_BFu8s_BFu9ll  {
  unsigned short v1:9;
  unsigned short v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFu8s_BFu9ll) C1{ Fs:9 Fs:8 FL:9}



static void Test_BFu9s_BFu8s_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu8s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu9s_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu9ll, BFu9s_BFu8s_BFu9ll)
//============================================================================


struct  BFu9s_BFu8s_BFu9s  {
  unsigned short v1:9;
  unsigned short v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFu8s_BFu9s) C1{ Fs:9 Fs:8 Fs:9}



static void Test_BFu9s_BFu8s_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu9s");
    static STRUCT_IF_C BFu9s_BFu8s_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu8s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu8s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu9s, BFu9s_BFu8s_BFu9s)
//============================================================================


struct  BFu9s_BFu8s_C  {
  unsigned short v1:9;
  unsigned short v2:8;
  char v3;
};
//SIG(1 BFu9s_BFu8s_C) C1{ Fs:9 Fs:8 Fc}



static void Test_BFu9s_BFu8s_C()
{
  {
    init_simple_test("BFu9s_BFu8s_C");
    static STRUCT_IF_C BFu9s_BFu8s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8s_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_C");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_C");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_C");
    check_field_offset(lv, v3, 3, "BFu9s_BFu8s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_C, BFu9s_BFu8s_C)
//============================================================================


struct  BFu9s_BFu8s_D  {
  unsigned short v1:9;
  unsigned short v2:8;
  double v3;
};
//SIG(1 BFu9s_BFu8s_D) C1{ Fs:9 Fs:8 FL}



static void Test_BFu9s_BFu8s_D()
{
  {
    init_simple_test("BFu9s_BFu8s_D");
    static STRUCT_IF_C BFu9s_BFu8s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu8s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8s_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_D");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_D");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu8s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_D, BFu9s_BFu8s_D)
//============================================================================


struct  BFu9s_BFu8s_F  {
  unsigned short v1:9;
  unsigned short v2:8;
  float v3;
};
//SIG(1 BFu9s_BFu8s_F) C1{ Fs:9 Fs:8 Fi}



static void Test_BFu9s_BFu8s_F()
{
  {
    init_simple_test("BFu9s_BFu8s_F");
    static STRUCT_IF_C BFu9s_BFu8s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8s_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_F");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_F");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_F");
    check_field_offset(lv, v3, 4, "BFu9s_BFu8s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_F, BFu9s_BFu8s_F)
//============================================================================


struct  BFu9s_BFu8s_I  {
  unsigned short v1:9;
  unsigned short v2:8;
  int v3;
};
//SIG(1 BFu9s_BFu8s_I) C1{ Fs:9 Fs:8 Fi}



static void Test_BFu9s_BFu8s_I()
{
  {
    init_simple_test("BFu9s_BFu8s_I");
    static STRUCT_IF_C BFu9s_BFu8s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8s_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_I");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_I");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_I");
    check_field_offset(lv, v3, 4, "BFu9s_BFu8s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_I, BFu9s_BFu8s_I)
//============================================================================


struct  BFu9s_BFu8s_Ip  {
  unsigned short v1:9;
  unsigned short v2:8;
  int *v3;
};
//SIG(1 BFu9s_BFu8s_Ip) C1{ Fs:9 Fs:8 Fp}



static void Test_BFu9s_BFu8s_Ip()
{
  {
    init_simple_test("BFu9s_BFu8s_Ip");
    static STRUCT_IF_C BFu9s_BFu8s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu8s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu8s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_Ip, BFu9s_BFu8s_Ip)
//============================================================================


struct  BFu9s_BFu8s_L  {
  unsigned short v1:9;
  unsigned short v2:8;
  __tsi64 v3;
};
//SIG(1 BFu9s_BFu8s_L) C1{ Fs:9 Fs:8 FL}



static void Test_BFu9s_BFu8s_L()
{
  {
    init_simple_test("BFu9s_BFu8s_L");
    static STRUCT_IF_C BFu9s_BFu8s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu8s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8s_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_L");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_L");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu8s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_L, BFu9s_BFu8s_L)
//============================================================================


struct  BFu9s_BFu8s_S  {
  unsigned short v1:9;
  unsigned short v2:8;
  short v3;
};
//SIG(1 BFu9s_BFu8s_S) C1{ Fs:9 Fs:8 Fs}



static void Test_BFu9s_BFu8s_S()
{
  {
    init_simple_test("BFu9s_BFu8s_S");
    static STRUCT_IF_C BFu9s_BFu8s_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu8s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8s_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_S");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_S");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_S");
    check_field_offset(lv, v3, 4, "BFu9s_BFu8s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_S, BFu9s_BFu8s_S)
//============================================================================


struct  BFu9s_BFu8s_Uc  {
  unsigned short v1:9;
  unsigned short v2:8;
  unsigned char v3;
};
//SIG(1 BFu9s_BFu8s_Uc) C1{ Fs:9 Fs:8 Fc}



static void Test_BFu9s_BFu8s_Uc()
{
  {
    init_simple_test("BFu9s_BFu8s_Uc");
    static STRUCT_IF_C BFu9s_BFu8s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_Uc");
    check_field_offset(lv, v3, 3, "BFu9s_BFu8s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_Uc, BFu9s_BFu8s_Uc)
//============================================================================


struct  BFu9s_BFu8s_Ui  {
  unsigned short v1:9;
  unsigned short v2:8;
  unsigned int v3;
};
//SIG(1 BFu9s_BFu8s_Ui) C1{ Fs:9 Fs:8 Fi}



static void Test_BFu9s_BFu8s_Ui()
{
  {
    init_simple_test("BFu9s_BFu8s_Ui");
    static STRUCT_IF_C BFu9s_BFu8s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu8s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_Ui");
    check_field_offset(lv, v3, 4, "BFu9s_BFu8s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_Ui, BFu9s_BFu8s_Ui)
//============================================================================


struct  BFu9s_BFu8s_Ul  {
  unsigned short v1:9;
  unsigned short v2:8;
  __tsu64 v3;
};
//SIG(1 BFu9s_BFu8s_Ul) C1{ Fs:9 Fs:8 FL}



static void Test_BFu9s_BFu8s_Ul()
{
  {
    init_simple_test("BFu9s_BFu8s_Ul");
    static STRUCT_IF_C BFu9s_BFu8s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu8s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu8s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_Ul, BFu9s_BFu8s_Ul)
//============================================================================


struct  BFu9s_BFu8s_Us  {
  unsigned short v1:9;
  unsigned short v2:8;
  unsigned short v3;
};
//SIG(1 BFu9s_BFu8s_Us) C1{ Fs:9 Fs:8 Fs}



static void Test_BFu9s_BFu8s_Us()
{
  {
    init_simple_test("BFu9s_BFu8s_Us");
    static STRUCT_IF_C BFu9s_BFu8s_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu8s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_Us");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_Us");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_Us");
    check_field_offset(lv, v3, 4, "BFu9s_BFu8s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_Us, BFu9s_BFu8s_Us)
//============================================================================


struct  BFu9s_BFu8s_Vp  {
  unsigned short v1:9;
  unsigned short v2:8;
  void *v3;
};
//SIG(1 BFu9s_BFu8s_Vp) C1{ Fs:9 Fs:8 Fp}



static void Test_BFu9s_BFu8s_Vp()
{
  {
    init_simple_test("BFu9s_BFu8s_Vp");
    static STRUCT_IF_C BFu9s_BFu8s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu8s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu8s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_Vp, BFu9s_BFu8s_Vp)
//============================================================================


struct  BFu9s_BFu9i  {
  unsigned short v1:9;
  unsigned int v2:9;
};
//SIG(1 BFu9s_BFu9i) C1{ Fs:9 Fi:9}



static void Test_BFu9s_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu9i");
    static STRUCT_IF_C BFu9s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i, BFu9s_BFu9i)
//============================================================================


struct  BFu9s_BFu9i_BFs9i  {
  unsigned short v1:9;
  unsigned int v2:9;
  signed int v3:9;
};
//SIG(1 BFu9s_BFu9i_BFs9i) C1{ Fs:9 Fi:9 Fi:9}



static void Test_BFu9s_BFu9i_BFs9i()
{
  {
    init_simple_test("BFu9s_BFu9i_BFs9i");
    static STRUCT_IF_C BFu9s_BFu9i_BFs9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFs9i, BFu9s_BFu9i_BFs9i)
//============================================================================


struct  BFu9s_BFu9i_BFs9i_BFs9i  {
  unsigned short v1:9;
  unsigned int v2:9;
  signed int v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFu9i_BFs9i_BFs9i) C1{ Fs:9 Fi:9 Fi:9 Fi:9}



static void Test_BFu9s_BFu9i_BFs9i_BFs9i()
{
  {
    init_simple_test("BFu9s_BFu9i_BFs9i_BFs9i");
    static STRUCT_IF_C BFu9s_BFu9i_BFs9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFs9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFs9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFs9i_BFs9i, BFu9s_BFu9i_BFs9i_BFs9i)
//============================================================================


struct  BFu9s_BFu9i_BFs9i_BFs9ll  {
  unsigned short v1:9;
  unsigned int v2:9;
  signed int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFu9i_BFs9i_BFs9ll) C1{ Fs:9 Fi:9 Fi:9 FL:9}



static void Test_BFu9s_BFu9i_BFs9i_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFu9i_BFs9i_BFs9ll");
    static STRUCT_IF_C BFu9s_BFu9i_BFs9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFs9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFs9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFu9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFs9i_BFs9ll, BFu9s_BFu9i_BFs9i_BFs9ll)
//============================================================================


struct  BFu9s_BFu9i_BFs9i_BFs9s  {
  unsigned short v1:9;
  unsigned int v2:9;
  signed int v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFu9i_BFs9i_BFs9s) C1{ Fs:9 Fi:9 Fi:9 Fs:9}



static void Test_BFu9s_BFu9i_BFs9i_BFs9s()
{
  {
    init_simple_test("BFu9s_BFu9i_BFs9i_BFs9s");
    static STRUCT_IF_C BFu9s_BFu9i_BFs9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFs9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFs9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFs9i_BFs9s, BFu9s_BFu9i_BFs9i_BFs9s)
//============================================================================


struct  BFu9s_BFu9i_BFs9i_BFu9i  {
  unsigned short v1:9;
  unsigned int v2:9;
  signed int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFu9i_BFs9i_BFu9i) C1{ Fs:9 Fi:9 Fi:9 Fi:9}



static void Test_BFu9s_BFu9i_BFs9i_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu9i_BFs9i_BFu9i");
    static STRUCT_IF_C BFu9s_BFu9i_BFs9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFs9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFs9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFs9i_BFu9i, BFu9s_BFu9i_BFs9i_BFu9i)
//============================================================================


struct  BFu9s_BFu9i_BFs9i_BFu9ll  {
  unsigned short v1:9;
  unsigned int v2:9;
  signed int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFu9i_BFs9i_BFu9ll) C1{ Fs:9 Fi:9 Fi:9 FL:9}



static void Test_BFu9s_BFu9i_BFs9i_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu9i_BFs9i_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu9i_BFs9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFs9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFs9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFu9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFs9i_BFu9ll, BFu9s_BFu9i_BFs9i_BFu9ll)
//============================================================================


struct  BFu9s_BFu9i_BFs9i_BFu9s  {
  unsigned short v1:9;
  unsigned int v2:9;
  signed int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFu9i_BFs9i_BFu9s) C1{ Fs:9 Fi:9 Fi:9 Fs:9}



static void Test_BFu9s_BFu9i_BFs9i_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu9i_BFs9i_BFu9s");
    static STRUCT_IF_C BFu9s_BFu9i_BFs9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFs9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFs9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFs9i_BFu9s, BFu9s_BFu9i_BFs9i_BFu9s)
//============================================================================


struct  BFu9s_BFu9i_BFs9ll  {
  unsigned short v1:9;
  unsigned int v2:9;
  signed __tsi64 v3:9;
};
//SIG(1 BFu9s_BFu9i_BFs9ll) C1{ Fs:9 Fi:9 FL:9}



static void Test_BFu9s_BFu9i_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFu9i_BFs9ll");
    static STRUCT_IF_C BFu9s_BFu9i_BFs9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFs9ll, BFu9s_BFu9i_BFs9ll)
//============================================================================


struct  BFu9s_BFu9i_BFs9ll_BFs9i  {
  unsigned short v1:9;
  unsigned int v2:9;
  signed __tsi64 v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFu9i_BFs9ll_BFs9i) C1{ Fs:9 Fi:9 FL:9 Fi:9}



static void Test_BFu9s_BFu9i_BFs9ll_BFs9i()
{
  {
    init_simple_test("BFu9s_BFu9i_BFs9ll_BFs9i");
    static STRUCT_IF_C BFu9s_BFu9i_BFs9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFs9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFs9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFs9ll_BFs9i, BFu9s_BFu9i_BFs9ll_BFs9i)
//============================================================================


struct  BFu9s_BFu9i_BFs9ll_BFs9ll  {
  unsigned short v1:9;
  unsigned int v2:9;
  signed __tsi64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFu9i_BFs9ll_BFs9ll) C1{ Fs:9 Fi:9 FL:9 FL:9}



static void Test_BFu9s_BFu9i_BFs9ll_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFu9i_BFs9ll_BFs9ll");
    static STRUCT_IF_C BFu9s_BFu9i_BFs9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFs9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFs9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFu9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFs9ll_BFs9ll, BFu9s_BFu9i_BFs9ll_BFs9ll)
//============================================================================


struct  BFu9s_BFu9i_BFs9ll_BFs9s  {
  unsigned short v1:9;
  unsigned int v2:9;
  signed __tsi64 v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFu9i_BFs9ll_BFs9s) C1{ Fs:9 Fi:9 FL:9 Fs:9}



static void Test_BFu9s_BFu9i_BFs9ll_BFs9s()
{
  {
    init_simple_test("BFu9s_BFu9i_BFs9ll_BFs9s");
    static STRUCT_IF_C BFu9s_BFu9i_BFs9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFs9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFs9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFs9ll_BFs9s, BFu9s_BFu9i_BFs9ll_BFs9s)
//============================================================================


struct  BFu9s_BFu9i_BFs9ll_BFu9i  {
  unsigned short v1:9;
  unsigned int v2:9;
  signed __tsi64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFu9i_BFs9ll_BFu9i) C1{ Fs:9 Fi:9 FL:9 Fi:9}



static void Test_BFu9s_BFu9i_BFs9ll_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu9i_BFs9ll_BFu9i");
    static STRUCT_IF_C BFu9s_BFu9i_BFs9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFs9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFs9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFs9ll_BFu9i, BFu9s_BFu9i_BFs9ll_BFu9i)
//============================================================================


struct  BFu9s_BFu9i_BFs9ll_BFu9ll  {
  unsigned short v1:9;
  unsigned int v2:9;
  signed __tsi64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFu9i_BFs9ll_BFu9ll) C1{ Fs:9 Fi:9 FL:9 FL:9}



static void Test_BFu9s_BFu9i_BFs9ll_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu9i_BFs9ll_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu9i_BFs9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFs9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFs9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFu9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFs9ll_BFu9ll, BFu9s_BFu9i_BFs9ll_BFu9ll)
//============================================================================


struct  BFu9s_BFu9i_BFs9ll_BFu9s  {
  unsigned short v1:9;
  unsigned int v2:9;
  signed __tsi64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFu9i_BFs9ll_BFu9s) C1{ Fs:9 Fi:9 FL:9 Fs:9}



static void Test_BFu9s_BFu9i_BFs9ll_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu9i_BFs9ll_BFu9s");
    static STRUCT_IF_C BFu9s_BFu9i_BFs9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFs9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFs9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFs9ll_BFu9s, BFu9s_BFu9i_BFs9ll_BFu9s)
//============================================================================


struct  BFu9s_BFu9i_BFs9s  {
  unsigned short v1:9;
  unsigned int v2:9;
  signed short v3:9;
};
//SIG(1 BFu9s_BFu9i_BFs9s) C1{ Fs:9 Fi:9 Fs:9}



static void Test_BFu9s_BFu9i_BFs9s()
{
  {
    init_simple_test("BFu9s_BFu9i_BFs9s");
    static STRUCT_IF_C BFu9s_BFu9i_BFs9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFs9s, BFu9s_BFu9i_BFs9s)
//============================================================================


struct  BFu9s_BFu9i_BFs9s_BFs9i  {
  unsigned short v1:9;
  unsigned int v2:9;
  signed short v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFu9i_BFs9s_BFs9i) C1{ Fs:9 Fi:9 Fs:9 Fi:9}



static void Test_BFu9s_BFu9i_BFs9s_BFs9i()
{
  {
    init_simple_test("BFu9s_BFu9i_BFs9s_BFs9i");
    static STRUCT_IF_C BFu9s_BFu9i_BFs9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFs9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFs9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFs9s_BFs9i, BFu9s_BFu9i_BFs9s_BFs9i)
//============================================================================


struct  BFu9s_BFu9i_BFs9s_BFs9ll  {
  unsigned short v1:9;
  unsigned int v2:9;
  signed short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFu9i_BFs9s_BFs9ll) C1{ Fs:9 Fi:9 Fs:9 FL:9}



static void Test_BFu9s_BFu9i_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFu9i_BFs9s_BFs9ll");
    static STRUCT_IF_C BFu9s_BFu9i_BFs9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFu9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFs9s_BFs9ll, BFu9s_BFu9i_BFs9s_BFs9ll)
//============================================================================


struct  BFu9s_BFu9i_BFs9s_BFs9s  {
  unsigned short v1:9;
  unsigned int v2:9;
  signed short v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFu9i_BFs9s_BFs9s) C1{ Fs:9 Fi:9 Fs:9 Fs:9}



static void Test_BFu9s_BFu9i_BFs9s_BFs9s()
{
  {
    init_simple_test("BFu9s_BFu9i_BFs9s_BFs9s");
    static STRUCT_IF_C BFu9s_BFu9i_BFs9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFs9s_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFs9s_BFs9s, BFu9s_BFu9i_BFs9s_BFs9s)
//============================================================================


struct  BFu9s_BFu9i_BFs9s_BFu9i  {
  unsigned short v1:9;
  unsigned int v2:9;
  signed short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFu9i_BFs9s_BFu9i) C1{ Fs:9 Fi:9 Fs:9 Fi:9}



static void Test_BFu9s_BFu9i_BFs9s_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu9i_BFs9s_BFu9i");
    static STRUCT_IF_C BFu9s_BFu9i_BFs9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFs9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFs9s_BFu9i, BFu9s_BFu9i_BFs9s_BFu9i)
//============================================================================


struct  BFu9s_BFu9i_BFs9s_BFu9ll  {
  unsigned short v1:9;
  unsigned int v2:9;
  signed short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFu9i_BFs9s_BFu9ll) C1{ Fs:9 Fi:9 Fs:9 FL:9}



static void Test_BFu9s_BFu9i_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu9i_BFs9s_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu9i_BFs9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFu9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFs9s_BFu9ll, BFu9s_BFu9i_BFs9s_BFu9ll)
//============================================================================


struct  BFu9s_BFu9i_BFs9s_BFu9s  {
  unsigned short v1:9;
  unsigned int v2:9;
  signed short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFu9i_BFs9s_BFu9s) C1{ Fs:9 Fi:9 Fs:9 Fs:9}



static void Test_BFu9s_BFu9i_BFs9s_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu9i_BFs9s_BFu9s");
    static STRUCT_IF_C BFu9s_BFu9i_BFs9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFs9s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFs9s_BFu9s, BFu9s_BFu9i_BFs9s_BFu9s)
//============================================================================


struct  BFu9s_BFu9i_BFu15i  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu9s_BFu9i_BFu15i) C1{ Fs:9 Fi:9 Fi:15}



static void Test_BFu9s_BFu9i_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu15i");
    static STRUCT_IF_C BFu9s_BFu9i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu9i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu15i, BFu9s_BFu9i_BFu15i)
//============================================================================


struct  BFu9s_BFu9i_BFu15ll  {
  unsigned short v1:9;
  unsigned int v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_BFu9i_BFu15ll) C1{ Fs:9 Fi:9 FL:15}



static void Test_BFu9s_BFu9i_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu9i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 2, 15, 1, "BFu9s_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 2, 15, hide_ull(1LL<<14), "BFu9s_BFu9i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu15ll, BFu9s_BFu9i_BFu15ll)
//============================================================================


struct  BFu9s_BFu9i_BFu15s  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu9s_BFu9i_BFu15s) C1{ Fs:9 Fi:9 Fs:15}



static void Test_BFu9s_BFu9i_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu15s");
    static STRUCT_IF_C BFu9s_BFu9i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu9i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu15s, BFu9s_BFu9i_BFu15s)
//============================================================================


struct  BFu9s_BFu9i_BFu16i  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu9s_BFu9i_BFu16i) C1{ Fs:9 Fi:9 Fi:16}



static void Test_BFu9s_BFu9i_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu16i");
    static STRUCT_IF_C BFu9s_BFu9i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu9i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu16i, BFu9s_BFu9i_BFu16i)
//============================================================================


struct  BFu9s_BFu9i_BFu16ll  {
  unsigned short v1:9;
  unsigned int v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_BFu9i_BFu16ll) C1{ Fs:9 Fi:9 FL:16}



static void Test_BFu9s_BFu9i_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu9i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 2, 16, 1, "BFu9s_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 2, 16, hide_ull(1LL<<15), "BFu9s_BFu9i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu16ll, BFu9s_BFu9i_BFu16ll)
//============================================================================


struct  BFu9s_BFu9i_BFu16s  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu9s_BFu9i_BFu16s) C1{ Fs:9 Fi:9 Fs:16}



static void Test_BFu9s_BFu9i_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu16s");
    static STRUCT_IF_C BFu9s_BFu9i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu9i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu16s, BFu9s_BFu9i_BFu16s)
//============================================================================


struct  BFu9s_BFu9i_BFu17i  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu9s_BFu9i_BFu17i) C1{ Fs:9 Fi:9 Fi:17}



static void Test_BFu9s_BFu9i_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu17i");
    static STRUCT_IF_C BFu9s_BFu9i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu9s_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu9i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu17i, BFu9s_BFu9i_BFu17i)
//============================================================================


struct  BFu9s_BFu9i_BFu17ll  {
  unsigned short v1:9;
  unsigned int v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_BFu9i_BFu17ll) C1{ Fs:9 Fi:9 FL:17}



static void Test_BFu9s_BFu9i_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu9i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 2, 17, 1, "BFu9s_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 2, 17, hide_ull(1LL<<16), "BFu9s_BFu9i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu17ll, BFu9s_BFu9i_BFu17ll)
//============================================================================


struct  BFu9s_BFu9i_BFu1c  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu9s_BFu9i_BFu1c) C1{ Fs:9 Fi:9 Fc:1}



static void Test_BFu9s_BFu9i_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu1c");
    static STRUCT_IF_C BFu9s_BFu9i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu1c");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu9s_BFu9i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu1c, BFu9s_BFu9i_BFu1c)
//============================================================================


struct  BFu9s_BFu9i_BFu1i  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu9s_BFu9i_BFu1i) C1{ Fs:9 Fi:9 Fi:1}



static void Test_BFu9s_BFu9i_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu1i");
    static STRUCT_IF_C BFu9s_BFu9i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu1i");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu9s_BFu9i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu1i, BFu9s_BFu9i_BFu1i)
//============================================================================


struct  BFu9s_BFu9i_BFu1ll  {
  unsigned short v1:9;
  unsigned int v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_BFu9i_BFu1ll) C1{ Fs:9 Fi:9 FL:1}



static void Test_BFu9s_BFu9i_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu9i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu1ll");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu9s_BFu9i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu1ll, BFu9s_BFu9i_BFu1ll)
//============================================================================


struct  BFu9s_BFu9i_BFu1s  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu9s_BFu9i_BFu1s) C1{ Fs:9 Fi:9 Fs:1}



static void Test_BFu9s_BFu9i_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu1s");
    static STRUCT_IF_C BFu9s_BFu9i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu1s");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu9s_BFu9i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu1s, BFu9s_BFu9i_BFu1s)
//============================================================================


struct  BFu9s_BFu9i_BFu31i  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu9s_BFu9i_BFu31i) C1{ Fs:9 Fi:9 Fi:31}



static void Test_BFu9s_BFu9i_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu31i");
    static STRUCT_IF_C BFu9s_BFu9i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_BFu9i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu9i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu31i, BFu9s_BFu9i_BFu31i)
//============================================================================


struct  BFu9s_BFu9i_BFu31ll  {
  unsigned short v1:9;
  unsigned int v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_BFu9i_BFu31ll) C1{ Fs:9 Fi:9 FL:31}



static void Test_BFu9s_BFu9i_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu9i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 2, 31, 1, "BFu9s_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 2, 31, hide_ull(1LL<<30), "BFu9s_BFu9i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu31ll, BFu9s_BFu9i_BFu31ll)
//============================================================================


struct  BFu9s_BFu9i_BFu32i  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu9s_BFu9i_BFu32i) C1{ Fs:9 Fi:9 Fi:32}



static void Test_BFu9s_BFu9i_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu32i");
    static STRUCT_IF_C BFu9s_BFu9i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_BFu9i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu9i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu32i, BFu9s_BFu9i_BFu32i)
//============================================================================


struct  BFu9s_BFu9i_BFu32ll  {
  unsigned short v1:9;
  unsigned int v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_BFu9i_BFu32ll) C1{ Fs:9 Fi:9 FL:32}



static void Test_BFu9s_BFu9i_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu9i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 2, 32, 1, "BFu9s_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 2, 32, hide_ull(1LL<<31), "BFu9s_BFu9i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu32ll, BFu9s_BFu9i_BFu32ll)
//============================================================================


struct  BFu9s_BFu9i_BFu33  {
  unsigned short v1:9;
  unsigned int v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_BFu9i_BFu33) C1{ Fs:9 Fi:9 FL:33}



static void Test_BFu9s_BFu9i_BFu33()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu33");
    static STRUCT_IF_C BFu9s_BFu9i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu33");
    set_bf_and_test(lv, v3, 2, 2, 33, 1, "BFu9s_BFu9i_BFu33");
    set_bf_and_test(lv, v3, 2, 2, 33, hide_ull(1LL<<32), "BFu9s_BFu9i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu33, BFu9s_BFu9i_BFu33)
//============================================================================


struct  BFu9s_BFu9i_BFu7c  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu9s_BFu9i_BFu7c) C1{ Fs:9 Fi:9 Fc:7}



static void Test_BFu9s_BFu9i_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu7c");
    static STRUCT_IF_C BFu9s_BFu9i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu9s_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu9i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu7c, BFu9s_BFu9i_BFu7c)
//============================================================================


struct  BFu9s_BFu9i_BFu7i  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu9s_BFu9i_BFu7i) C1{ Fs:9 Fi:9 Fi:7}



static void Test_BFu9s_BFu9i_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu7i");
    static STRUCT_IF_C BFu9s_BFu9i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu9s_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu9s_BFu9i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu7i, BFu9s_BFu9i_BFu7i)
//============================================================================


struct  BFu9s_BFu9i_BFu7ll  {
  unsigned short v1:9;
  unsigned int v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_BFu9i_BFu7ll) C1{ Fs:9 Fi:9 FL:7}



static void Test_BFu9s_BFu9i_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu9i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu9s_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu9s_BFu9i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu7ll, BFu9s_BFu9i_BFu7ll)
//============================================================================


struct  BFu9s_BFu9i_BFu7s  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu9s_BFu9i_BFu7s) C1{ Fs:9 Fi:9 Fs:7}



static void Test_BFu9s_BFu9i_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu7s");
    static STRUCT_IF_C BFu9s_BFu9i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu9s_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu9s_BFu9i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu7s, BFu9s_BFu9i_BFu7s)
//============================================================================


struct  BFu9s_BFu9i_BFu8c  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu9s_BFu9i_BFu8c) C1{ Fs:9 Fi:9 Fc:8}



static void Test_BFu9s_BFu9i_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu8c");
    static STRUCT_IF_C BFu9s_BFu9i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu9s_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu9i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu8c, BFu9s_BFu9i_BFu8c)
//============================================================================


struct  BFu9s_BFu9i_BFu8i  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu9s_BFu9i_BFu8i) C1{ Fs:9 Fi:9 Fi:8}



static void Test_BFu9s_BFu9i_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu8i");
    static STRUCT_IF_C BFu9s_BFu9i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu9s_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu9s_BFu9i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu8i, BFu9s_BFu9i_BFu8i)
//============================================================================


struct  BFu9s_BFu9i_BFu8ll  {
  unsigned short v1:9;
  unsigned int v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_BFu9i_BFu8ll) C1{ Fs:9 Fi:9 FL:8}



static void Test_BFu9s_BFu9i_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu9i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu9s_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu9s_BFu9i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu8ll, BFu9s_BFu9i_BFu8ll)
//============================================================================


struct  BFu9s_BFu9i_BFu8s  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu9s_BFu9i_BFu8s) C1{ Fs:9 Fi:9 Fs:8}



static void Test_BFu9s_BFu9i_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu8s");
    static STRUCT_IF_C BFu9s_BFu9i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu9s_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu9s_BFu9i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu8s, BFu9s_BFu9i_BFu8s)
//============================================================================


struct  BFu9s_BFu9i_BFu9i  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFu9i_BFu9i) C1{ Fs:9 Fi:9 Fi:9}



static void Test_BFu9s_BFu9i_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu9i");
    static STRUCT_IF_C BFu9s_BFu9i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu9i, BFu9s_BFu9i_BFu9i)
//============================================================================


struct  BFu9s_BFu9i_BFu9i_BFs9i  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned int v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFu9i_BFu9i_BFs9i) C1{ Fs:9 Fi:9 Fi:9 Fi:9}



static void Test_BFu9s_BFu9i_BFu9i_BFs9i()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu9i_BFs9i");
    static STRUCT_IF_C BFu9s_BFu9i_BFu9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFu9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu9i_BFs9i, BFu9s_BFu9i_BFu9i_BFs9i)
//============================================================================


struct  BFu9s_BFu9i_BFu9i_BFs9ll  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFu9i_BFu9i_BFs9ll) C1{ Fs:9 Fi:9 Fi:9 FL:9}



static void Test_BFu9s_BFu9i_BFu9i_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu9i_BFs9ll");
    static STRUCT_IF_C BFu9s_BFu9i_BFu9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFu9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFu9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFu9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu9i_BFs9ll, BFu9s_BFu9i_BFu9i_BFs9ll)
//============================================================================


struct  BFu9s_BFu9i_BFu9i_BFs9s  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned int v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFu9i_BFu9i_BFs9s) C1{ Fs:9 Fi:9 Fi:9 Fs:9}



static void Test_BFu9s_BFu9i_BFu9i_BFs9s()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu9i_BFs9s");
    static STRUCT_IF_C BFu9s_BFu9i_BFu9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFu9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu9i_BFs9s, BFu9s_BFu9i_BFu9i_BFs9s)
//============================================================================


struct  BFu9s_BFu9i_BFu9i_BFu9i  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFu9i_BFu9i_BFu9i) C1{ Fs:9 Fi:9 Fi:9 Fi:9}



static void Test_BFu9s_BFu9i_BFu9i_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu9i_BFu9i");
    static STRUCT_IF_C BFu9s_BFu9i_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu9i_BFu9i, BFu9s_BFu9i_BFu9i_BFu9i)
//============================================================================


struct  BFu9s_BFu9i_BFu9i_BFu9ll  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFu9i_BFu9i_BFu9ll) C1{ Fs:9 Fi:9 Fi:9 FL:9}



static void Test_BFu9s_BFu9i_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu9i_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu9i_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFu9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu9i_BFu9ll, BFu9s_BFu9i_BFu9i_BFu9ll)
//============================================================================


struct  BFu9s_BFu9i_BFu9i_BFu9s  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFu9i_BFu9i_BFu9s) C1{ Fs:9 Fi:9 Fi:9 Fs:9}



static void Test_BFu9s_BFu9i_BFu9i_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu9i_BFu9s");
    static STRUCT_IF_C BFu9s_BFu9i_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu9i_BFu9s, BFu9s_BFu9i_BFu9i_BFu9s)
//============================================================================


struct  BFu9s_BFu9i_BFu9ll  {
  unsigned short v1:9;
  unsigned int v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFu9i_BFu9ll) C1{ Fs:9 Fi:9 FL:9}



static void Test_BFu9s_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu9i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu9ll, BFu9s_BFu9i_BFu9ll)
//============================================================================


struct  BFu9s_BFu9i_BFu9ll_BFs9i  {
  unsigned short v1:9;
  unsigned int v2:9;
  __tsu64 v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFu9i_BFu9ll_BFs9i) C1{ Fs:9 Fi:9 FL:9 Fi:9}



static void Test_BFu9s_BFu9i_BFu9ll_BFs9i()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu9ll_BFs9i");
    static STRUCT_IF_C BFu9s_BFu9i_BFu9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFu9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFu9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu9ll_BFs9i, BFu9s_BFu9i_BFu9ll_BFs9i)
//============================================================================


struct  BFu9s_BFu9i_BFu9ll_BFs9ll  {
  unsigned short v1:9;
  unsigned int v2:9;
  __tsu64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFu9i_BFu9ll_BFs9ll) C1{ Fs:9 Fi:9 FL:9 FL:9}



static void Test_BFu9s_BFu9i_BFu9ll_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu9ll_BFs9ll");
    static STRUCT_IF_C BFu9s_BFu9i_BFu9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFu9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFu9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFu9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu9ll_BFs9ll, BFu9s_BFu9i_BFu9ll_BFs9ll)
//============================================================================


struct  BFu9s_BFu9i_BFu9ll_BFs9s  {
  unsigned short v1:9;
  unsigned int v2:9;
  __tsu64 v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFu9i_BFu9ll_BFs9s) C1{ Fs:9 Fi:9 FL:9 Fs:9}



static void Test_BFu9s_BFu9i_BFu9ll_BFs9s()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu9ll_BFs9s");
    static STRUCT_IF_C BFu9s_BFu9i_BFu9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFu9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFu9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu9ll_BFs9s, BFu9s_BFu9i_BFu9ll_BFs9s)
//============================================================================


struct  BFu9s_BFu9i_BFu9ll_BFu9i  {
  unsigned short v1:9;
  unsigned int v2:9;
  __tsu64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFu9i_BFu9ll_BFu9i) C1{ Fs:9 Fi:9 FL:9 Fi:9}



static void Test_BFu9s_BFu9i_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu9ll_BFu9i");
    static STRUCT_IF_C BFu9s_BFu9i_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu9ll_BFu9i, BFu9s_BFu9i_BFu9ll_BFu9i)
//============================================================================


struct  BFu9s_BFu9i_BFu9ll_BFu9ll  {
  unsigned short v1:9;
  unsigned int v2:9;
  __tsu64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFu9i_BFu9ll_BFu9ll) C1{ Fs:9 Fi:9 FL:9 FL:9}



static void Test_BFu9s_BFu9i_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu9i_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFu9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu9ll_BFu9ll, BFu9s_BFu9i_BFu9ll_BFu9ll)
//============================================================================


struct  BFu9s_BFu9i_BFu9ll_BFu9s  {
  unsigned short v1:9;
  unsigned int v2:9;
  __tsu64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFu9i_BFu9ll_BFu9s) C1{ Fs:9 Fi:9 FL:9 Fs:9}



static void Test_BFu9s_BFu9i_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu9ll_BFu9s");
    static STRUCT_IF_C BFu9s_BFu9i_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu9ll_BFu9s, BFu9s_BFu9i_BFu9ll_BFu9s)
//============================================================================


struct  BFu9s_BFu9i_BFu9s  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFu9i_BFu9s) C1{ Fs:9 Fi:9 Fs:9}



static void Test_BFu9s_BFu9i_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu9s");
    static STRUCT_IF_C BFu9s_BFu9i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu9s, BFu9s_BFu9i_BFu9s)
//============================================================================


struct  BFu9s_BFu9i_BFu9s_BFs9i  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned short v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFu9i_BFu9s_BFs9i) C1{ Fs:9 Fi:9 Fs:9 Fi:9}



static void Test_BFu9s_BFu9i_BFu9s_BFs9i()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu9s_BFs9i");
    static STRUCT_IF_C BFu9s_BFu9i_BFu9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFu9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu9s_BFs9i, BFu9s_BFu9i_BFu9s_BFs9i)
//============================================================================


struct  BFu9s_BFu9i_BFu9s_BFs9ll  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFu9i_BFu9s_BFs9ll) C1{ Fs:9 Fi:9 Fs:9 FL:9}



static void Test_BFu9s_BFu9i_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu9s_BFs9ll");
    static STRUCT_IF_C BFu9s_BFu9i_BFu9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFu9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu9s_BFs9ll, BFu9s_BFu9i_BFu9s_BFs9ll)
//============================================================================


struct  BFu9s_BFu9i_BFu9s_BFs9s  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned short v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFu9i_BFu9s_BFs9s) C1{ Fs:9 Fi:9 Fs:9 Fs:9}



static void Test_BFu9s_BFu9i_BFu9s_BFs9s()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu9s_BFs9s");
    static STRUCT_IF_C BFu9s_BFu9i_BFu9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu9s_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9i_BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu9s_BFs9s, BFu9s_BFu9i_BFu9s_BFs9s)
//============================================================================


struct  BFu9s_BFu9i_BFu9s_BFu9i  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFu9i_BFu9s_BFu9i) C1{ Fs:9 Fi:9 Fs:9 Fi:9}



static void Test_BFu9s_BFu9i_BFu9s_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu9s_BFu9i");
    static STRUCT_IF_C BFu9s_BFu9i_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu9s_BFu9i, BFu9s_BFu9i_BFu9s_BFu9i)
//============================================================================


struct  BFu9s_BFu9i_BFu9s_BFu9ll  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFu9i_BFu9s_BFu9ll) C1{ Fs:9 Fi:9 Fs:9 FL:9}



static void Test_BFu9s_BFu9i_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu9s_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu9i_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFu9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu9s_BFu9ll, BFu9s_BFu9i_BFu9s_BFu9ll)
//============================================================================


struct  BFu9s_BFu9i_BFu9s_BFu9s  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFu9i_BFu9s_BFu9s) C1{ Fs:9 Fi:9 Fs:9 Fs:9}



static void Test_BFu9s_BFu9i_BFu9s_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu9s_BFu9s");
    static STRUCT_IF_C BFu9s_BFu9i_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_BFu9s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu9s_BFu9s, BFu9s_BFu9i_BFu9s_BFu9s)
//============================================================================


struct  BFu9s_BFu9i_C  {
  unsigned short v1:9;
  unsigned int v2:9;
  char v3;
};
//SIG(1 BFu9s_BFu9i_C) C1{ Fs:9 Fi:9 Fc}



static void Test_BFu9s_BFu9i_C()
{
  {
    init_simple_test("BFu9s_BFu9i_C");
    static STRUCT_IF_C BFu9s_BFu9i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_C");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_C");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_C");
    check_field_offset(lv, v3, 3, "BFu9s_BFu9i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_C, BFu9s_BFu9i_C)
//============================================================================


struct  BFu9s_BFu9i_D  {
  unsigned short v1:9;
  unsigned int v2:9;
  double v3;
};
//SIG(1 BFu9s_BFu9i_D) C1{ Fs:9 Fi:9 FL}



static void Test_BFu9s_BFu9i_D()
{
  {
    init_simple_test("BFu9s_BFu9i_D");
    static STRUCT_IF_C BFu9s_BFu9i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu9i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_D");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_D");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu9i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_D, BFu9s_BFu9i_D)
//============================================================================


struct  BFu9s_BFu9i_F  {
  unsigned short v1:9;
  unsigned int v2:9;
  float v3;
};
//SIG(1 BFu9s_BFu9i_F) C1{ Fs:9 Fi:9 Fi}



static void Test_BFu9s_BFu9i_F()
{
  {
    init_simple_test("BFu9s_BFu9i_F");
    static STRUCT_IF_C BFu9s_BFu9i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_F");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_F");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_F");
    check_field_offset(lv, v3, 4, "BFu9s_BFu9i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_F, BFu9s_BFu9i_F)
//============================================================================


struct  BFu9s_BFu9i_I  {
  unsigned short v1:9;
  unsigned int v2:9;
  int v3;
};
//SIG(1 BFu9s_BFu9i_I) C1{ Fs:9 Fi:9 Fi}



static void Test_BFu9s_BFu9i_I()
{
  {
    init_simple_test("BFu9s_BFu9i_I");
    static STRUCT_IF_C BFu9s_BFu9i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_I");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_I");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_I");
    check_field_offset(lv, v3, 4, "BFu9s_BFu9i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_I, BFu9s_BFu9i_I)
//============================================================================


struct  BFu9s_BFu9i_Ip  {
  unsigned short v1:9;
  unsigned int v2:9;
  int *v3;
};
//SIG(1 BFu9s_BFu9i_Ip) C1{ Fs:9 Fi:9 Fp}



static void Test_BFu9s_BFu9i_Ip()
{
  {
    init_simple_test("BFu9s_BFu9i_Ip");
    static STRUCT_IF_C BFu9s_BFu9i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu9i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_Ip");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_Ip");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu9i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_Ip, BFu9s_BFu9i_Ip)
//============================================================================


struct  BFu9s_BFu9i_L  {
  unsigned short v1:9;
  unsigned int v2:9;
  __tsi64 v3;
};
//SIG(1 BFu9s_BFu9i_L) C1{ Fs:9 Fi:9 FL}



static void Test_BFu9s_BFu9i_L()
{
  {
    init_simple_test("BFu9s_BFu9i_L");
    static STRUCT_IF_C BFu9s_BFu9i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu9i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_L");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_L");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu9i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_L, BFu9s_BFu9i_L)
//============================================================================


struct  BFu9s_BFu9i_S  {
  unsigned short v1:9;
  unsigned int v2:9;
  short v3;
};
//SIG(1 BFu9s_BFu9i_S) C1{ Fs:9 Fi:9 Fs}



static void Test_BFu9s_BFu9i_S()
{
  {
    init_simple_test("BFu9s_BFu9i_S");
    static STRUCT_IF_C BFu9s_BFu9i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_S");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_S");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_S");
    check_field_offset(lv, v3, 4, "BFu9s_BFu9i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_S, BFu9s_BFu9i_S)
//============================================================================


struct  BFu9s_BFu9i_Uc  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned char v3;
};
//SIG(1 BFu9s_BFu9i_Uc) C1{ Fs:9 Fi:9 Fc}



static void Test_BFu9s_BFu9i_Uc()
{
  {
    init_simple_test("BFu9s_BFu9i_Uc");
    static STRUCT_IF_C BFu9s_BFu9i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_Uc");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_Uc");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_Uc");
    check_field_offset(lv, v3, 3, "BFu9s_BFu9i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_Uc, BFu9s_BFu9i_Uc)
//============================================================================


struct  BFu9s_BFu9i_Ui  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned int v3;
};
//SIG(1 BFu9s_BFu9i_Ui) C1{ Fs:9 Fi:9 Fi}



static void Test_BFu9s_BFu9i_Ui()
{
  {
    init_simple_test("BFu9s_BFu9i_Ui");
    static STRUCT_IF_C BFu9s_BFu9i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_Ui");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_Ui");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_Ui");
    check_field_offset(lv, v3, 4, "BFu9s_BFu9i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_Ui, BFu9s_BFu9i_Ui)
//============================================================================


struct  BFu9s_BFu9i_Ul  {
  unsigned short v1:9;
  unsigned int v2:9;
  __tsu64 v3;
};
//SIG(1 BFu9s_BFu9i_Ul) C1{ Fs:9 Fi:9 FL}



static void Test_BFu9s_BFu9i_Ul()
{
  {
    init_simple_test("BFu9s_BFu9i_Ul");
    static STRUCT_IF_C BFu9s_BFu9i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu9i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_Ul");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_Ul");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu9i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_Ul, BFu9s_BFu9i_Ul)
//============================================================================


struct  BFu9s_BFu9i_Us  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned short v3;
};
//SIG(1 BFu9s_BFu9i_Us) C1{ Fs:9 Fi:9 Fs}



static void Test_BFu9s_BFu9i_Us()
{
  {
    init_simple_test("BFu9s_BFu9i_Us");
    static STRUCT_IF_C BFu9s_BFu9i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_Us");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_Us");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_Us");
    check_field_offset(lv, v3, 4, "BFu9s_BFu9i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_Us, BFu9s_BFu9i_Us)
//============================================================================


struct  BFu9s_BFu9i_Vp  {
  unsigned short v1:9;
  unsigned int v2:9;
  void *v3;
};
//SIG(1 BFu9s_BFu9i_Vp) C1{ Fs:9 Fi:9 Fp}



static void Test_BFu9s_BFu9i_Vp()
{
  {
    init_simple_test("BFu9s_BFu9i_Vp");
    static STRUCT_IF_C BFu9s_BFu9i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu9i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_Vp");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_Vp");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu9i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_Vp, BFu9s_BFu9i_Vp)
//============================================================================


struct  BFu9s_BFu9ll  {
  unsigned short v1:9;
  __tsu64 v2:9;
};
//SIG(1 BFu9s_BFu9ll) C1{ Fs:9 FL:9}



static void Test_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll, BFu9s_BFu9ll)
//============================================================================


struct  BFu9s_BFu9ll_BFs9i  {
  unsigned short v1:9;
  __tsu64 v2:9;
  signed int v3:9;
};
//SIG(1 BFu9s_BFu9ll_BFs9i) C1{ Fs:9 FL:9 Fi:9}



static void Test_BFu9s_BFu9ll_BFs9i()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFs9i");
    static STRUCT_IF_C BFu9s_BFu9ll_BFs9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFs9i, BFu9s_BFu9ll_BFs9i)
//============================================================================


struct  BFu9s_BFu9ll_BFs9i_BFs9i  {
  unsigned short v1:9;
  __tsu64 v2:9;
  signed int v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFs9i_BFs9i) C1{ Fs:9 FL:9 Fi:9 Fi:9}



static void Test_BFu9s_BFu9ll_BFs9i_BFs9i()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFs9i_BFs9i");
    static STRUCT_IF_C BFu9s_BFu9ll_BFs9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFs9i_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFs9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFs9i_BFs9i, BFu9s_BFu9ll_BFs9i_BFs9i)
//============================================================================


struct  BFu9s_BFu9ll_BFs9i_BFs9ll  {
  unsigned short v1:9;
  __tsu64 v2:9;
  signed int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFs9i_BFs9ll) C1{ Fs:9 FL:9 Fi:9 FL:9}



static void Test_BFu9s_BFu9ll_BFs9i_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFs9i_BFs9ll");
    static STRUCT_IF_C BFu9s_BFu9ll_BFs9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFs9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFs9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFu9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFs9i_BFs9ll, BFu9s_BFu9ll_BFs9i_BFs9ll)
//============================================================================


struct  BFu9s_BFu9ll_BFs9i_BFs9s  {
  unsigned short v1:9;
  __tsu64 v2:9;
  signed int v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFs9i_BFs9s) C1{ Fs:9 FL:9 Fi:9 Fs:9}



static void Test_BFu9s_BFu9ll_BFs9i_BFs9s()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFs9i_BFs9s");
    static STRUCT_IF_C BFu9s_BFu9ll_BFs9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFs9i_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFs9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFs9i_BFs9s, BFu9s_BFu9ll_BFs9i_BFs9s)
//============================================================================


struct  BFu9s_BFu9ll_BFs9i_BFu9i  {
  unsigned short v1:9;
  __tsu64 v2:9;
  signed int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFs9i_BFu9i) C1{ Fs:9 FL:9 Fi:9 Fi:9}



static void Test_BFu9s_BFu9ll_BFs9i_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFs9i_BFu9i");
    static STRUCT_IF_C BFu9s_BFu9ll_BFs9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFs9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFs9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFs9i_BFu9i, BFu9s_BFu9ll_BFs9i_BFu9i)
//============================================================================


struct  BFu9s_BFu9ll_BFs9i_BFu9ll  {
  unsigned short v1:9;
  __tsu64 v2:9;
  signed int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFs9i_BFu9ll) C1{ Fs:9 FL:9 Fi:9 FL:9}



static void Test_BFu9s_BFu9ll_BFs9i_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFs9i_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu9ll_BFs9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFs9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFs9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFu9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFs9i_BFu9ll, BFu9s_BFu9ll_BFs9i_BFu9ll)
//============================================================================


struct  BFu9s_BFu9ll_BFs9i_BFu9s  {
  unsigned short v1:9;
  __tsu64 v2:9;
  signed int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFs9i_BFu9s) C1{ Fs:9 FL:9 Fi:9 Fs:9}



static void Test_BFu9s_BFu9ll_BFs9i_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFs9i_BFu9s");
    static STRUCT_IF_C BFu9s_BFu9ll_BFs9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFs9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFs9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFs9i_BFu9s, BFu9s_BFu9ll_BFs9i_BFu9s)
//============================================================================


struct  BFu9s_BFu9ll_BFs9ll  {
  unsigned short v1:9;
  __tsu64 v2:9;
  signed __tsi64 v3:9;
};
//SIG(1 BFu9s_BFu9ll_BFs9ll) C1{ Fs:9 FL:9 FL:9}



static void Test_BFu9s_BFu9ll_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFs9ll");
    static STRUCT_IF_C BFu9s_BFu9ll_BFs9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFs9ll, BFu9s_BFu9ll_BFs9ll)
//============================================================================


struct  BFu9s_BFu9ll_BFs9ll_BFs9i  {
  unsigned short v1:9;
  __tsu64 v2:9;
  signed __tsi64 v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFs9ll_BFs9i) C1{ Fs:9 FL:9 FL:9 Fi:9}



static void Test_BFu9s_BFu9ll_BFs9ll_BFs9i()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFs9ll_BFs9i");
    static STRUCT_IF_C BFu9s_BFu9ll_BFs9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFs9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFs9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFs9ll_BFs9i, BFu9s_BFu9ll_BFs9ll_BFs9i)
//============================================================================


struct  BFu9s_BFu9ll_BFs9ll_BFs9ll  {
  unsigned short v1:9;
  __tsu64 v2:9;
  signed __tsi64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFs9ll_BFs9ll) C1{ Fs:9 FL:9 FL:9 FL:9}



static void Test_BFu9s_BFu9ll_BFs9ll_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFs9ll_BFs9ll");
    static STRUCT_IF_C BFu9s_BFu9ll_BFs9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFs9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFs9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFu9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFs9ll_BFs9ll, BFu9s_BFu9ll_BFs9ll_BFs9ll)
//============================================================================


struct  BFu9s_BFu9ll_BFs9ll_BFs9s  {
  unsigned short v1:9;
  __tsu64 v2:9;
  signed __tsi64 v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFs9ll_BFs9s) C1{ Fs:9 FL:9 FL:9 Fs:9}



static void Test_BFu9s_BFu9ll_BFs9ll_BFs9s()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFs9ll_BFs9s");
    static STRUCT_IF_C BFu9s_BFu9ll_BFs9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFs9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFs9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFs9ll_BFs9s, BFu9s_BFu9ll_BFs9ll_BFs9s)
//============================================================================


struct  BFu9s_BFu9ll_BFs9ll_BFu9i  {
  unsigned short v1:9;
  __tsu64 v2:9;
  signed __tsi64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFs9ll_BFu9i) C1{ Fs:9 FL:9 FL:9 Fi:9}



static void Test_BFu9s_BFu9ll_BFs9ll_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFs9ll_BFu9i");
    static STRUCT_IF_C BFu9s_BFu9ll_BFs9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFs9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFs9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFs9ll_BFu9i, BFu9s_BFu9ll_BFs9ll_BFu9i)
//============================================================================


struct  BFu9s_BFu9ll_BFs9ll_BFu9ll  {
  unsigned short v1:9;
  __tsu64 v2:9;
  signed __tsi64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFs9ll_BFu9ll) C1{ Fs:9 FL:9 FL:9 FL:9}



static void Test_BFu9s_BFu9ll_BFs9ll_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFs9ll_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu9ll_BFs9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFs9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFs9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFu9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFs9ll_BFu9ll, BFu9s_BFu9ll_BFs9ll_BFu9ll)
//============================================================================


struct  BFu9s_BFu9ll_BFs9ll_BFu9s  {
  unsigned short v1:9;
  __tsu64 v2:9;
  signed __tsi64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFs9ll_BFu9s) C1{ Fs:9 FL:9 FL:9 Fs:9}



static void Test_BFu9s_BFu9ll_BFs9ll_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFs9ll_BFu9s");
    static STRUCT_IF_C BFu9s_BFu9ll_BFs9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFs9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFs9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFs9ll_BFu9s, BFu9s_BFu9ll_BFs9ll_BFu9s)
//============================================================================


struct  BFu9s_BFu9ll_BFs9s  {
  unsigned short v1:9;
  __tsu64 v2:9;
  signed short v3:9;
};
//SIG(1 BFu9s_BFu9ll_BFs9s) C1{ Fs:9 FL:9 Fs:9}



static void Test_BFu9s_BFu9ll_BFs9s()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFs9s");
    static STRUCT_IF_C BFu9s_BFu9ll_BFs9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFs9s, BFu9s_BFu9ll_BFs9s)
//============================================================================


struct  BFu9s_BFu9ll_BFs9s_BFs9i  {
  unsigned short v1:9;
  __tsu64 v2:9;
  signed short v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFs9s_BFs9i) C1{ Fs:9 FL:9 Fs:9 Fi:9}



static void Test_BFu9s_BFu9ll_BFs9s_BFs9i()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFs9s_BFs9i");
    static STRUCT_IF_C BFu9s_BFu9ll_BFs9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFs9s_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFs9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFs9s_BFs9i, BFu9s_BFu9ll_BFs9s_BFs9i)
//============================================================================


struct  BFu9s_BFu9ll_BFs9s_BFs9ll  {
  unsigned short v1:9;
  __tsu64 v2:9;
  signed short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFs9s_BFs9ll) C1{ Fs:9 FL:9 Fs:9 FL:9}



static void Test_BFu9s_BFu9ll_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFs9s_BFs9ll");
    static STRUCT_IF_C BFu9s_BFu9ll_BFs9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFu9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFs9s_BFs9ll, BFu9s_BFu9ll_BFs9s_BFs9ll)
//============================================================================


struct  BFu9s_BFu9ll_BFs9s_BFs9s  {
  unsigned short v1:9;
  __tsu64 v2:9;
  signed short v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFs9s_BFs9s) C1{ Fs:9 FL:9 Fs:9 Fs:9}



static void Test_BFu9s_BFu9ll_BFs9s_BFs9s()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFs9s_BFs9s");
    static STRUCT_IF_C BFu9s_BFu9ll_BFs9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFs9s_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFs9s_BFs9s, BFu9s_BFu9ll_BFs9s_BFs9s)
//============================================================================


struct  BFu9s_BFu9ll_BFs9s_BFu9i  {
  unsigned short v1:9;
  __tsu64 v2:9;
  signed short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFs9s_BFu9i) C1{ Fs:9 FL:9 Fs:9 Fi:9}



static void Test_BFu9s_BFu9ll_BFs9s_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFs9s_BFu9i");
    static STRUCT_IF_C BFu9s_BFu9ll_BFs9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFs9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFs9s_BFu9i, BFu9s_BFu9ll_BFs9s_BFu9i)
//============================================================================


struct  BFu9s_BFu9ll_BFs9s_BFu9ll  {
  unsigned short v1:9;
  __tsu64 v2:9;
  signed short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFs9s_BFu9ll) C1{ Fs:9 FL:9 Fs:9 FL:9}



static void Test_BFu9s_BFu9ll_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFs9s_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu9ll_BFs9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFu9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFs9s_BFu9ll, BFu9s_BFu9ll_BFs9s_BFu9ll)
//============================================================================


struct  BFu9s_BFu9ll_BFs9s_BFu9s  {
  unsigned short v1:9;
  __tsu64 v2:9;
  signed short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFs9s_BFu9s) C1{ Fs:9 FL:9 Fs:9 Fs:9}



static void Test_BFu9s_BFu9ll_BFs9s_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFs9s_BFu9s");
    static STRUCT_IF_C BFu9s_BFu9ll_BFs9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFs9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFs9s_BFu9s, BFu9s_BFu9ll_BFs9s_BFu9s)
//============================================================================


struct  BFu9s_BFu9ll_BFu15i  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu9s_BFu9ll_BFu15i) C1{ Fs:9 FL:9 Fi:15}



static void Test_BFu9s_BFu9ll_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu15i");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu9ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu15i, BFu9s_BFu9ll_BFu15i)
//============================================================================


struct  BFu9s_BFu9ll_BFu15ll  {
  unsigned short v1:9;
  __tsu64 v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_BFu9ll_BFu15ll) C1{ Fs:9 FL:9 FL:15}



static void Test_BFu9s_BFu9ll_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 2, 15, 1, "BFu9s_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 2, 15, hide_ull(1LL<<14), "BFu9s_BFu9ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu15ll, BFu9s_BFu9ll_BFu15ll)
//============================================================================


struct  BFu9s_BFu9ll_BFu15s  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu9s_BFu9ll_BFu15s) C1{ Fs:9 FL:9 Fs:15}



static void Test_BFu9s_BFu9ll_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu15s");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu9ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu15s, BFu9s_BFu9ll_BFu15s)
//============================================================================


struct  BFu9s_BFu9ll_BFu16i  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu9s_BFu9ll_BFu16i) C1{ Fs:9 FL:9 Fi:16}



static void Test_BFu9s_BFu9ll_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu16i");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu9ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu16i, BFu9s_BFu9ll_BFu16i)
//============================================================================


struct  BFu9s_BFu9ll_BFu16ll  {
  unsigned short v1:9;
  __tsu64 v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_BFu9ll_BFu16ll) C1{ Fs:9 FL:9 FL:16}



static void Test_BFu9s_BFu9ll_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 2, 16, 1, "BFu9s_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 2, 16, hide_ull(1LL<<15), "BFu9s_BFu9ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu16ll, BFu9s_BFu9ll_BFu16ll)
//============================================================================


struct  BFu9s_BFu9ll_BFu16s  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu9s_BFu9ll_BFu16s) C1{ Fs:9 FL:9 Fs:16}



static void Test_BFu9s_BFu9ll_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu16s");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu9ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu16s, BFu9s_BFu9ll_BFu16s)
//============================================================================


struct  BFu9s_BFu9ll_BFu17i  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu9s_BFu9ll_BFu17i) C1{ Fs:9 FL:9 Fi:17}



static void Test_BFu9s_BFu9ll_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu17i");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu9s_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu9ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu17i, BFu9s_BFu9ll_BFu17i)
//============================================================================


struct  BFu9s_BFu9ll_BFu17ll  {
  unsigned short v1:9;
  __tsu64 v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_BFu9ll_BFu17ll) C1{ Fs:9 FL:9 FL:17}



static void Test_BFu9s_BFu9ll_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 2, 17, 1, "BFu9s_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 2, 17, hide_ull(1LL<<16), "BFu9s_BFu9ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu17ll, BFu9s_BFu9ll_BFu17ll)
//============================================================================


struct  BFu9s_BFu9ll_BFu1c  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu9s_BFu9ll_BFu1c) C1{ Fs:9 FL:9 Fc:1}



static void Test_BFu9s_BFu9ll_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu1c");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu1c");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu9s_BFu9ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu1c, BFu9s_BFu9ll_BFu1c)
//============================================================================


struct  BFu9s_BFu9ll_BFu1i  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu9s_BFu9ll_BFu1i) C1{ Fs:9 FL:9 Fi:1}



static void Test_BFu9s_BFu9ll_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu1i");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu1i");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu9s_BFu9ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu1i, BFu9s_BFu9ll_BFu1i)
//============================================================================


struct  BFu9s_BFu9ll_BFu1ll  {
  unsigned short v1:9;
  __tsu64 v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_BFu9ll_BFu1ll) C1{ Fs:9 FL:9 FL:1}



static void Test_BFu9s_BFu9ll_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu9s_BFu9ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu1ll, BFu9s_BFu9ll_BFu1ll)
//============================================================================


struct  BFu9s_BFu9ll_BFu1s  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu9s_BFu9ll_BFu1s) C1{ Fs:9 FL:9 Fs:1}



static void Test_BFu9s_BFu9ll_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu1s");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu1s");
    set_bf_and_test(lv, v3, 2, 2, 1, 1, "BFu9s_BFu9ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu1s, BFu9s_BFu9ll_BFu1s)
//============================================================================


struct  BFu9s_BFu9ll_BFu31i  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu9s_BFu9ll_BFu31i) C1{ Fs:9 FL:9 Fi:31}



static void Test_BFu9s_BFu9ll_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu31i");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_BFu9ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu9ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu31i, BFu9s_BFu9ll_BFu31i)
//============================================================================


struct  BFu9s_BFu9ll_BFu31ll  {
  unsigned short v1:9;
  __tsu64 v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_BFu9ll_BFu31ll) C1{ Fs:9 FL:9 FL:31}



static void Test_BFu9s_BFu9ll_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 2, 31, 1, "BFu9s_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 2, 31, hide_ull(1LL<<30), "BFu9s_BFu9ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu31ll, BFu9s_BFu9ll_BFu31ll)
//============================================================================


struct  BFu9s_BFu9ll_BFu32i  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu9s_BFu9ll_BFu32i) C1{ Fs:9 FL:9 Fi:32}



static void Test_BFu9s_BFu9ll_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu32i");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_BFu9ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu9ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu32i, BFu9s_BFu9ll_BFu32i)
//============================================================================


struct  BFu9s_BFu9ll_BFu32ll  {
  unsigned short v1:9;
  __tsu64 v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_BFu9ll_BFu32ll) C1{ Fs:9 FL:9 FL:32}



static void Test_BFu9s_BFu9ll_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 2, 32, 1, "BFu9s_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 2, 32, hide_ull(1LL<<31), "BFu9s_BFu9ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu32ll, BFu9s_BFu9ll_BFu32ll)
//============================================================================


struct  BFu9s_BFu9ll_BFu33  {
  unsigned short v1:9;
  __tsu64 v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_BFu9ll_BFu33) C1{ Fs:9 FL:9 FL:33}



static void Test_BFu9s_BFu9ll_BFu33()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu33");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, 2, 2, 33, 1, "BFu9s_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, 2, 2, 33, hide_ull(1LL<<32), "BFu9s_BFu9ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu33, BFu9s_BFu9ll_BFu33)
//============================================================================


struct  BFu9s_BFu9ll_BFu7c  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu9s_BFu9ll_BFu7c) C1{ Fs:9 FL:9 Fc:7}



static void Test_BFu9s_BFu9ll_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu7c");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu9s_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu9ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu7c, BFu9s_BFu9ll_BFu7c)
//============================================================================


struct  BFu9s_BFu9ll_BFu7i  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu9s_BFu9ll_BFu7i) C1{ Fs:9 FL:9 Fi:7}



static void Test_BFu9s_BFu9ll_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu7i");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu9s_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu9s_BFu9ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu7i, BFu9s_BFu9ll_BFu7i)
//============================================================================


struct  BFu9s_BFu9ll_BFu7ll  {
  unsigned short v1:9;
  __tsu64 v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_BFu9ll_BFu7ll) C1{ Fs:9 FL:9 FL:7}



static void Test_BFu9s_BFu9ll_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu9s_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu9s_BFu9ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu7ll, BFu9s_BFu9ll_BFu7ll)
//============================================================================


struct  BFu9s_BFu9ll_BFu7s  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu9s_BFu9ll_BFu7s) C1{ Fs:9 FL:9 Fs:7}



static void Test_BFu9s_BFu9ll_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu7s");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 2, 7, 1, "BFu9s_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 2, 7, hide_ull(1LL<<6), "BFu9s_BFu9ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu7s, BFu9s_BFu9ll_BFu7s)
//============================================================================


struct  BFu9s_BFu9ll_BFu8c  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu9s_BFu9ll_BFu8c) C1{ Fs:9 FL:9 Fc:8}



static void Test_BFu9s_BFu9ll_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu8c");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu9s_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu9ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu8c, BFu9s_BFu9ll_BFu8c)
//============================================================================


struct  BFu9s_BFu9ll_BFu8i  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu9s_BFu9ll_BFu8i) C1{ Fs:9 FL:9 Fi:8}



static void Test_BFu9s_BFu9ll_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu8i");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu9s_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu9s_BFu9ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu8i, BFu9s_BFu9ll_BFu8i)
//============================================================================


struct  BFu9s_BFu9ll_BFu8ll  {
  unsigned short v1:9;
  __tsu64 v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_BFu9ll_BFu8ll) C1{ Fs:9 FL:9 FL:8}



static void Test_BFu9s_BFu9ll_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu9s_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu9s_BFu9ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu8ll, BFu9s_BFu9ll_BFu8ll)
//============================================================================


struct  BFu9s_BFu9ll_BFu8s  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu9s_BFu9ll_BFu8s) C1{ Fs:9 FL:9 Fs:8}



static void Test_BFu9s_BFu9ll_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu8s");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 2, 8, 1, "BFu9s_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 2, 8, hide_ull(1LL<<7), "BFu9s_BFu9ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu8s, BFu9s_BFu9ll_BFu8s)
//============================================================================


struct  BFu9s_BFu9ll_BFu9i  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFu9ll_BFu9i) C1{ Fs:9 FL:9 Fi:9}



static void Test_BFu9s_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu9i");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu9i, BFu9s_BFu9ll_BFu9i)
//============================================================================


struct  BFu9s_BFu9ll_BFu9i_BFs9i  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned int v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFu9i_BFs9i) C1{ Fs:9 FL:9 Fi:9 Fi:9}



static void Test_BFu9s_BFu9ll_BFu9i_BFs9i()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu9i_BFs9i");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu9i_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFu9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu9i_BFs9i, BFu9s_BFu9ll_BFu9i_BFs9i)
//============================================================================


struct  BFu9s_BFu9ll_BFu9i_BFs9ll  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFu9i_BFs9ll) C1{ Fs:9 FL:9 Fi:9 FL:9}



static void Test_BFu9s_BFu9ll_BFu9i_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu9i_BFs9ll");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFu9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFu9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu9i_BFs9ll, BFu9s_BFu9ll_BFu9i_BFs9ll)
//============================================================================


struct  BFu9s_BFu9ll_BFu9i_BFs9s  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned int v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFu9i_BFs9s) C1{ Fs:9 FL:9 Fi:9 Fs:9}



static void Test_BFu9s_BFu9ll_BFu9i_BFs9s()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu9i_BFs9s");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu9i_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFu9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu9i_BFs9s, BFu9s_BFu9ll_BFu9i_BFs9s)
//============================================================================


struct  BFu9s_BFu9ll_BFu9i_BFu9i  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFu9i_BFu9i) C1{ Fs:9 FL:9 Fi:9 Fi:9}



static void Test_BFu9s_BFu9ll_BFu9i_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu9i_BFu9i");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu9i_BFu9i, BFu9s_BFu9ll_BFu9i_BFu9i)
//============================================================================


struct  BFu9s_BFu9ll_BFu9i_BFu9ll  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFu9i_BFu9ll) C1{ Fs:9 FL:9 Fi:9 FL:9}



static void Test_BFu9s_BFu9ll_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu9i_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFu9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu9i_BFu9ll, BFu9s_BFu9ll_BFu9i_BFu9ll)
//============================================================================


struct  BFu9s_BFu9ll_BFu9i_BFu9s  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFu9i_BFu9s) C1{ Fs:9 FL:9 Fi:9 Fs:9}



static void Test_BFu9s_BFu9ll_BFu9i_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu9i_BFu9s");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu9i_BFu9s, BFu9s_BFu9ll_BFu9i_BFu9s)
//============================================================================


struct  BFu9s_BFu9ll_BFu9ll  {
  unsigned short v1:9;
  __tsu64 v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFu9ll_BFu9ll) C1{ Fs:9 FL:9 FL:9}



static void Test_BFu9s_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu9ll, BFu9s_BFu9ll_BFu9ll)
//============================================================================


struct  BFu9s_BFu9ll_BFu9ll_BFs9i  {
  unsigned short v1:9;
  __tsu64 v2:9;
  __tsu64 v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFu9ll_BFs9i) C1{ Fs:9 FL:9 FL:9 Fi:9}



static void Test_BFu9s_BFu9ll_BFu9ll_BFs9i()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu9ll_BFs9i");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFu9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu9ll_BFs9i, BFu9s_BFu9ll_BFu9ll_BFs9i)
//============================================================================


struct  BFu9s_BFu9ll_BFu9ll_BFs9ll  {
  unsigned short v1:9;
  __tsu64 v2:9;
  __tsu64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFu9ll_BFs9ll) C1{ Fs:9 FL:9 FL:9 FL:9}



static void Test_BFu9s_BFu9ll_BFu9ll_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu9ll_BFs9ll");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFu9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFu9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu9ll_BFs9ll, BFu9s_BFu9ll_BFu9ll_BFs9ll)
//============================================================================


struct  BFu9s_BFu9ll_BFu9ll_BFs9s  {
  unsigned short v1:9;
  __tsu64 v2:9;
  __tsu64 v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFu9ll_BFs9s) C1{ Fs:9 FL:9 FL:9 Fs:9}



static void Test_BFu9s_BFu9ll_BFu9ll_BFs9s()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu9ll_BFs9s");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFu9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu9ll_BFs9s, BFu9s_BFu9ll_BFu9ll_BFs9s)
//============================================================================


struct  BFu9s_BFu9ll_BFu9ll_BFu9i  {
  unsigned short v1:9;
  __tsu64 v2:9;
  __tsu64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFu9ll_BFu9i) C1{ Fs:9 FL:9 FL:9 Fi:9}



static void Test_BFu9s_BFu9ll_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu9ll_BFu9i");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu9ll_BFu9i, BFu9s_BFu9ll_BFu9ll_BFu9i)
//============================================================================


struct  BFu9s_BFu9ll_BFu9ll_BFu9ll  {
  unsigned short v1:9;
  __tsu64 v2:9;
  __tsu64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFu9ll_BFu9ll) C1{ Fs:9 FL:9 FL:9 FL:9}



static void Test_BFu9s_BFu9ll_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFu9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu9ll_BFu9ll, BFu9s_BFu9ll_BFu9ll_BFu9ll)
//============================================================================


struct  BFu9s_BFu9ll_BFu9ll_BFu9s  {
  unsigned short v1:9;
  __tsu64 v2:9;
  __tsu64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFu9ll_BFu9s) C1{ Fs:9 FL:9 FL:9 Fs:9}



static void Test_BFu9s_BFu9ll_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu9ll_BFu9s");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu9ll_BFu9s, BFu9s_BFu9ll_BFu9ll_BFu9s)
//============================================================================


struct  BFu9s_BFu9ll_BFu9s  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFu9ll_BFu9s) C1{ Fs:9 FL:9 Fs:9}



static void Test_BFu9s_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu9s");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu9s, BFu9s_BFu9ll_BFu9s)
//============================================================================


struct  BFu9s_BFu9ll_BFu9s_BFs9i  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned short v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFu9s_BFs9i) C1{ Fs:9 FL:9 Fs:9 Fi:9}



static void Test_BFu9s_BFu9ll_BFu9s_BFs9i()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu9s_BFs9i");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu9s_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFu9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu9s_BFs9i, BFu9s_BFu9ll_BFu9s_BFs9i)
//============================================================================


struct  BFu9s_BFu9ll_BFu9s_BFs9ll  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFu9s_BFs9ll) C1{ Fs:9 FL:9 Fs:9 FL:9}



static void Test_BFu9s_BFu9ll_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu9s_BFs9ll");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFu9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu9s_BFs9ll, BFu9s_BFu9ll_BFu9s_BFs9ll)
//============================================================================


struct  BFu9s_BFu9ll_BFu9s_BFs9s  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned short v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFu9s_BFs9s) C1{ Fs:9 FL:9 Fs:9 Fs:9}



static void Test_BFu9s_BFu9ll_BFu9s_BFs9s()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu9s_BFs9s");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu9s_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9ll_BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu9s_BFs9s, BFu9s_BFu9ll_BFu9s_BFs9s)
//============================================================================


struct  BFu9s_BFu9ll_BFu9s_BFu9i  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFu9s_BFu9i) C1{ Fs:9 FL:9 Fs:9 Fi:9}



static void Test_BFu9s_BFu9ll_BFu9s_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu9s_BFu9i");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu9s_BFu9i, BFu9s_BFu9ll_BFu9s_BFu9i)
//============================================================================


struct  BFu9s_BFu9ll_BFu9s_BFu9ll  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFu9s_BFu9ll) C1{ Fs:9 FL:9 Fs:9 FL:9}



static void Test_BFu9s_BFu9ll_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu9s_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFu9s_BFu9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu9s_BFu9ll, BFu9s_BFu9ll_BFu9s_BFu9ll)
//============================================================================


struct  BFu9s_BFu9ll_BFu9s_BFu9s  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFu9ll_BFu9s_BFu9s) C1{ Fs:9 FL:9 Fs:9 Fs:9}



static void Test_BFu9s_BFu9ll_BFu9s_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu9s_BFu9s");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_BFu9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFu9s_BFu9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFu9s_BFu9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu9s_BFu9s, BFu9s_BFu9ll_BFu9s_BFu9s)
//============================================================================


struct  BFu9s_BFu9ll_C  {
  unsigned short v1:9;
  __tsu64 v2:9;
  char v3;
};
//SIG(1 BFu9s_BFu9ll_C) C1{ Fs:9 FL:9 Fc}



static void Test_BFu9s_BFu9ll_C()
{
  {
    init_simple_test("BFu9s_BFu9ll_C");
    static STRUCT_IF_C BFu9s_BFu9ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_C");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_C");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_C");
    check_field_offset(lv, v3, 3, "BFu9s_BFu9ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_C, BFu9s_BFu9ll_C)
//============================================================================


struct  BFu9s_BFu9ll_D  {
  unsigned short v1:9;
  __tsu64 v2:9;
  double v3;
};
//SIG(1 BFu9s_BFu9ll_D) C1{ Fs:9 FL:9 FL}



static void Test_BFu9s_BFu9ll_D()
{
  {
    init_simple_test("BFu9s_BFu9ll_D");
    static STRUCT_IF_C BFu9s_BFu9ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu9ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_D");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_D");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu9ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_D, BFu9s_BFu9ll_D)
//============================================================================


struct  BFu9s_BFu9ll_F  {
  unsigned short v1:9;
  __tsu64 v2:9;
  float v3;
};
//SIG(1 BFu9s_BFu9ll_F) C1{ Fs:9 FL:9 Fi}



static void Test_BFu9s_BFu9ll_F()
{
  {
    init_simple_test("BFu9s_BFu9ll_F");
    static STRUCT_IF_C BFu9s_BFu9ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_F");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_F");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_F");
    check_field_offset(lv, v3, 4, "BFu9s_BFu9ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_F, BFu9s_BFu9ll_F)
//============================================================================


struct  BFu9s_BFu9ll_I  {
  unsigned short v1:9;
  __tsu64 v2:9;
  int v3;
};
//SIG(1 BFu9s_BFu9ll_I) C1{ Fs:9 FL:9 Fi}



static void Test_BFu9s_BFu9ll_I()
{
  {
    init_simple_test("BFu9s_BFu9ll_I");
    static STRUCT_IF_C BFu9s_BFu9ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_I");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_I");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_I");
    check_field_offset(lv, v3, 4, "BFu9s_BFu9ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_I, BFu9s_BFu9ll_I)
//============================================================================


struct  BFu9s_BFu9ll_Ip  {
  unsigned short v1:9;
  __tsu64 v2:9;
  int *v3;
};
//SIG(1 BFu9s_BFu9ll_Ip) C1{ Fs:9 FL:9 Fp}



static void Test_BFu9s_BFu9ll_Ip()
{
  {
    init_simple_test("BFu9s_BFu9ll_Ip");
    static STRUCT_IF_C BFu9s_BFu9ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu9ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_Ip");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_Ip");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu9ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_Ip, BFu9s_BFu9ll_Ip)
//============================================================================


struct  BFu9s_BFu9ll_L  {
  unsigned short v1:9;
  __tsu64 v2:9;
  __tsi64 v3;
};
//SIG(1 BFu9s_BFu9ll_L) C1{ Fs:9 FL:9 FL}



static void Test_BFu9s_BFu9ll_L()
{
  {
    init_simple_test("BFu9s_BFu9ll_L");
    static STRUCT_IF_C BFu9s_BFu9ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu9ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_L");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_L");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu9ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_L, BFu9s_BFu9ll_L)
//============================================================================


struct  BFu9s_BFu9ll_S  {
  unsigned short v1:9;
  __tsu64 v2:9;
  short v3;
};
//SIG(1 BFu9s_BFu9ll_S) C1{ Fs:9 FL:9 Fs}



static void Test_BFu9s_BFu9ll_S()
{
  {
    init_simple_test("BFu9s_BFu9ll_S");
    static STRUCT_IF_C BFu9s_BFu9ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_S");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_S");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_S");
    check_field_offset(lv, v3, 4, "BFu9s_BFu9ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_S, BFu9s_BFu9ll_S)
//============================================================================


struct  BFu9s_BFu9ll_Uc  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned char v3;
};
//SIG(1 BFu9s_BFu9ll_Uc) C1{ Fs:9 FL:9 Fc}



static void Test_BFu9s_BFu9ll_Uc()
{
  {
    init_simple_test("BFu9s_BFu9ll_Uc");
    static STRUCT_IF_C BFu9s_BFu9ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_Uc");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_Uc");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_Uc");
    check_field_offset(lv, v3, 3, "BFu9s_BFu9ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_Uc, BFu9s_BFu9ll_Uc)
//============================================================================


struct  BFu9s_BFu9ll_Ui  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned int v3;
};
//SIG(1 BFu9s_BFu9ll_Ui) C1{ Fs:9 FL:9 Fi}



static void Test_BFu9s_BFu9ll_Ui()
{
  {
    init_simple_test("BFu9s_BFu9ll_Ui");
    static STRUCT_IF_C BFu9s_BFu9ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_Ui");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_Ui");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_Ui");
    check_field_offset(lv, v3, 4, "BFu9s_BFu9ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_Ui, BFu9s_BFu9ll_Ui)
//============================================================================


struct  BFu9s_BFu9ll_Ul  {
  unsigned short v1:9;
  __tsu64 v2:9;
  __tsu64 v3;
};
//SIG(1 BFu9s_BFu9ll_Ul) C1{ Fs:9 FL:9 FL}



static void Test_BFu9s_BFu9ll_Ul()
{
  {
    init_simple_test("BFu9s_BFu9ll_Ul");
    static STRUCT_IF_C BFu9s_BFu9ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu9ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_Ul");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_Ul");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu9ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_Ul, BFu9s_BFu9ll_Ul)
//============================================================================


struct  BFu9s_BFu9ll_Us  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned short v3;
};
//SIG(1 BFu9s_BFu9ll_Us) C1{ Fs:9 FL:9 Fs}



static void Test_BFu9s_BFu9ll_Us()
{
  {
    init_simple_test("BFu9s_BFu9ll_Us");
    static STRUCT_IF_C BFu9s_BFu9ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_Us");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_Us");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_Us");
    check_field_offset(lv, v3, 4, "BFu9s_BFu9ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_Us, BFu9s_BFu9ll_Us)
//============================================================================


struct  BFu9s_BFu9ll_Vp  {
  unsigned short v1:9;
  __tsu64 v2:9;
  void *v3;
};
//SIG(1 BFu9s_BFu9ll_Vp) C1{ Fs:9 FL:9 Fp}



static void Test_BFu9s_BFu9ll_Vp()
{
  {
    init_simple_test("BFu9s_BFu9ll_Vp");
    static STRUCT_IF_C BFu9s_BFu9ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu9ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_Vp");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_Vp");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu9ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_Vp, BFu9s_BFu9ll_Vp)
//============================================================================


struct  BFu9s_BFu9s  {
  unsigned short v1:9;
  unsigned short v2:9;
};
//SIG(1 BFu9s_BFu9s) C1{ Fs:9 Fs:9}



static void Test_BFu9s_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu9s");
    static STRUCT_IF_C BFu9s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s, BFu9s_BFu9s)
//============================================================================


struct  BFu9s_BFu9s_BFs9i  {
  unsigned short v1:9;
  unsigned short v2:9;
  signed int v3:9;
};
//SIG(1 BFu9s_BFu9s_BFs9i) C1{ Fs:9 Fs:9 Fi:9}



static void Test_BFu9s_BFu9s_BFs9i()
{
  {
    init_simple_test("BFu9s_BFu9s_BFs9i");
    static STRUCT_IF_C BFu9s_BFu9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFs9i, BFu9s_BFu9s_BFs9i)
//============================================================================


struct  BFu9s_BFu9s_BFs9i_BFs9i  {
  unsigned short v1:9;
  unsigned short v2:9;
  signed int v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFu9s_BFs9i_BFs9i) C1{ Fs:9 Fs:9 Fi:9 Fi:9}



static void Test_BFu9s_BFu9s_BFs9i_BFs9i()
{
  {
    init_simple_test("BFu9s_BFu9s_BFs9i_BFs9i");
    static STRUCT_IF_C BFu9s_BFu9s_BFs9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFs9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9s_BFs9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFu9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFs9i_BFs9i, BFu9s_BFu9s_BFs9i_BFs9i)
//============================================================================


struct  BFu9s_BFu9s_BFs9i_BFs9ll  {
  unsigned short v1:9;
  unsigned short v2:9;
  signed int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFu9s_BFs9i_BFs9ll) C1{ Fs:9 Fs:9 Fi:9 FL:9}



static void Test_BFu9s_BFu9s_BFs9i_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFu9s_BFs9i_BFs9ll");
    static STRUCT_IF_C BFu9s_BFu9s_BFs9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFs9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFs9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFu9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFs9i_BFs9ll, BFu9s_BFu9s_BFs9i_BFs9ll)
//============================================================================


struct  BFu9s_BFu9s_BFs9i_BFs9s  {
  unsigned short v1:9;
  unsigned short v2:9;
  signed int v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFu9s_BFs9i_BFs9s) C1{ Fs:9 Fs:9 Fi:9 Fs:9}



static void Test_BFu9s_BFu9s_BFs9i_BFs9s()
{
  {
    init_simple_test("BFu9s_BFu9s_BFs9i_BFs9s");
    static STRUCT_IF_C BFu9s_BFu9s_BFs9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFs9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9s_BFs9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFu9s_BFu9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFs9i_BFs9s, BFu9s_BFu9s_BFs9i_BFs9s)
//============================================================================


struct  BFu9s_BFu9s_BFs9i_BFu9i  {
  unsigned short v1:9;
  unsigned short v2:9;
  signed int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFu9s_BFs9i_BFu9i) C1{ Fs:9 Fs:9 Fi:9 Fi:9}



static void Test_BFu9s_BFu9s_BFs9i_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu9s_BFs9i_BFu9i");
    static STRUCT_IF_C BFu9s_BFu9s_BFs9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFs9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9s_BFs9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFs9i_BFu9i, BFu9s_BFu9s_BFs9i_BFu9i)
//============================================================================


struct  BFu9s_BFu9s_BFs9i_BFu9ll  {
  unsigned short v1:9;
  unsigned short v2:9;
  signed int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFu9s_BFs9i_BFu9ll) C1{ Fs:9 Fs:9 Fi:9 FL:9}



static void Test_BFu9s_BFu9s_BFs9i_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu9s_BFs9i_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu9s_BFs9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFs9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFs9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFs9i_BFu9ll, BFu9s_BFu9s_BFs9i_BFu9ll)
//============================================================================


struct  BFu9s_BFu9s_BFs9i_BFu9s  {
  unsigned short v1:9;
  unsigned short v2:9;
  signed int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFu9s_BFs9i_BFu9s) C1{ Fs:9 Fs:9 Fi:9 Fs:9}



static void Test_BFu9s_BFu9s_BFs9i_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu9s_BFs9i_BFu9s");
    static STRUCT_IF_C BFu9s_BFu9s_BFs9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFs9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9s_BFs9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFu9s_BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFs9i_BFu9s, BFu9s_BFu9s_BFs9i_BFu9s)
//============================================================================


struct  BFu9s_BFu9s_BFs9ll  {
  unsigned short v1:9;
  unsigned short v2:9;
  signed __tsi64 v3:9;
};
//SIG(1 BFu9s_BFu9s_BFs9ll) C1{ Fs:9 Fs:9 FL:9}



static void Test_BFu9s_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFu9s_BFs9ll");
    static STRUCT_IF_C BFu9s_BFu9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFs9ll, BFu9s_BFu9s_BFs9ll)
//============================================================================


struct  BFu9s_BFu9s_BFs9ll_BFs9i  {
  unsigned short v1:9;
  unsigned short v2:9;
  signed __tsi64 v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFu9s_BFs9ll_BFs9i) C1{ Fs:9 Fs:9 FL:9 Fi:9}



static void Test_BFu9s_BFu9s_BFs9ll_BFs9i()
{
  {
    init_simple_test("BFu9s_BFu9s_BFs9ll_BFs9i");
    static STRUCT_IF_C BFu9s_BFu9s_BFs9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFs9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFs9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFu9s_BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFs9ll_BFs9i, BFu9s_BFu9s_BFs9ll_BFs9i)
//============================================================================


struct  BFu9s_BFu9s_BFs9ll_BFs9ll  {
  unsigned short v1:9;
  unsigned short v2:9;
  signed __tsi64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFu9s_BFs9ll_BFs9ll) C1{ Fs:9 Fs:9 FL:9 FL:9}



static void Test_BFu9s_BFu9s_BFs9ll_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFu9s_BFs9ll_BFs9ll");
    static STRUCT_IF_C BFu9s_BFu9s_BFs9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFs9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFs9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFu9s_BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFs9ll_BFs9ll, BFu9s_BFu9s_BFs9ll_BFs9ll)
//============================================================================


struct  BFu9s_BFu9s_BFs9ll_BFs9s  {
  unsigned short v1:9;
  unsigned short v2:9;
  signed __tsi64 v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFu9s_BFs9ll_BFs9s) C1{ Fs:9 Fs:9 FL:9 Fs:9}



static void Test_BFu9s_BFu9s_BFs9ll_BFs9s()
{
  {
    init_simple_test("BFu9s_BFu9s_BFs9ll_BFs9s");
    static STRUCT_IF_C BFu9s_BFu9s_BFs9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFs9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFs9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFu9s_BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFs9ll_BFs9s, BFu9s_BFu9s_BFs9ll_BFs9s)
//============================================================================


struct  BFu9s_BFu9s_BFs9ll_BFu9i  {
  unsigned short v1:9;
  unsigned short v2:9;
  signed __tsi64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFu9s_BFs9ll_BFu9i) C1{ Fs:9 Fs:9 FL:9 Fi:9}



static void Test_BFu9s_BFu9s_BFs9ll_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu9s_BFs9ll_BFu9i");
    static STRUCT_IF_C BFu9s_BFu9s_BFs9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFs9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFs9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFu9s_BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFs9ll_BFu9i, BFu9s_BFu9s_BFs9ll_BFu9i)
//============================================================================


struct  BFu9s_BFu9s_BFs9ll_BFu9ll  {
  unsigned short v1:9;
  unsigned short v2:9;
  signed __tsi64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFu9s_BFs9ll_BFu9ll) C1{ Fs:9 Fs:9 FL:9 FL:9}



static void Test_BFu9s_BFu9s_BFs9ll_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu9s_BFs9ll_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu9s_BFs9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFs9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFs9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFu9s_BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFs9ll_BFu9ll, BFu9s_BFu9s_BFs9ll_BFu9ll)
//============================================================================


struct  BFu9s_BFu9s_BFs9ll_BFu9s  {
  unsigned short v1:9;
  unsigned short v2:9;
  signed __tsi64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFu9s_BFs9ll_BFu9s) C1{ Fs:9 Fs:9 FL:9 Fs:9}



static void Test_BFu9s_BFu9s_BFs9ll_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu9s_BFs9ll_BFu9s");
    static STRUCT_IF_C BFu9s_BFu9s_BFs9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFs9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFs9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFu9s_BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFs9ll_BFu9s, BFu9s_BFu9s_BFs9ll_BFu9s)
//============================================================================


struct  BFu9s_BFu9s_BFs9s  {
  unsigned short v1:9;
  unsigned short v2:9;
  signed short v3:9;
};
//SIG(1 BFu9s_BFu9s_BFs9s) C1{ Fs:9 Fs:9 Fs:9}



static void Test_BFu9s_BFu9s_BFs9s()
{
  {
    init_simple_test("BFu9s_BFu9s_BFs9s");
    static STRUCT_IF_C BFu9s_BFu9s_BFs9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu9s_BFs9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFs9s, BFu9s_BFu9s_BFs9s)
//============================================================================


struct  BFu9s_BFu9s_BFs9s_BFs9i  {
  unsigned short v1:9;
  unsigned short v2:9;
  signed short v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFu9s_BFs9s_BFs9i) C1{ Fs:9 Fs:9 Fs:9 Fi:9}



static void Test_BFu9s_BFu9s_BFs9s_BFs9i()
{
  {
    init_simple_test("BFu9s_BFu9s_BFs9s_BFs9i");
    static STRUCT_IF_C BFu9s_BFu9s_BFs9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFs9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9s_BFs9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFs9s_BFs9i, BFu9s_BFu9s_BFs9s_BFs9i)
//============================================================================


struct  BFu9s_BFu9s_BFs9s_BFs9ll  {
  unsigned short v1:9;
  unsigned short v2:9;
  signed short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFu9s_BFs9s_BFs9ll) C1{ Fs:9 Fs:9 Fs:9 FL:9}



static void Test_BFu9s_BFu9s_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFu9s_BFs9s_BFs9ll");
    static STRUCT_IF_C BFu9s_BFu9s_BFs9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFs9s_BFs9ll, BFu9s_BFu9s_BFs9s_BFs9ll)
//============================================================================


struct  BFu9s_BFu9s_BFs9s_BFs9s  {
  unsigned short v1:9;
  unsigned short v2:9;
  signed short v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFu9s_BFs9s_BFs9s) C1{ Fs:9 Fs:9 Fs:9 Fs:9}



static void Test_BFu9s_BFu9s_BFs9s_BFs9s()
{
  {
    init_simple_test("BFu9s_BFu9s_BFs9s_BFs9s");
    static STRUCT_IF_C BFu9s_BFu9s_BFs9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFs9s_BFs9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu9s_BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFu9s_BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFs9s_BFs9s, BFu9s_BFu9s_BFs9s_BFs9s)
//============================================================================


struct  BFu9s_BFu9s_BFs9s_BFu9i  {
  unsigned short v1:9;
  unsigned short v2:9;
  signed short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFu9s_BFs9s_BFu9i) C1{ Fs:9 Fs:9 Fs:9 Fi:9}



static void Test_BFu9s_BFu9s_BFs9s_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu9s_BFs9s_BFu9i");
    static STRUCT_IF_C BFu9s_BFu9s_BFs9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFs9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9s_BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFs9s_BFu9i, BFu9s_BFu9s_BFs9s_BFu9i)
//============================================================================


struct  BFu9s_BFu9s_BFs9s_BFu9ll  {
  unsigned short v1:9;
  unsigned short v2:9;
  signed short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFu9s_BFs9s_BFu9ll) C1{ Fs:9 Fs:9 Fs:9 FL:9}



static void Test_BFu9s_BFu9s_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu9s_BFs9s_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu9s_BFs9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFs9s_BFu9ll, BFu9s_BFu9s_BFs9s_BFu9ll)
//============================================================================


struct  BFu9s_BFu9s_BFs9s_BFu9s  {
  unsigned short v1:9;
  unsigned short v2:9;
  signed short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFu9s_BFs9s_BFu9s) C1{ Fs:9 Fs:9 Fs:9 Fs:9}



static void Test_BFu9s_BFu9s_BFs9s_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu9s_BFs9s_BFu9s");
    static STRUCT_IF_C BFu9s_BFu9s_BFs9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFs9s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu9s_BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFu9s_BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFs9s_BFu9s, BFu9s_BFu9s_BFs9s_BFu9s)
//============================================================================


struct  BFu9s_BFu9s_BFu15i  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu9s_BFu9s_BFu15i) C1{ Fs:9 Fs:9 Fi:15}



static void Test_BFu9s_BFu9s_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu15i");
    static STRUCT_IF_C BFu9s_BFu9s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu9s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu15i, BFu9s_BFu9s_BFu15i)
//============================================================================


struct  BFu9s_BFu9s_BFu15ll  {
  unsigned short v1:9;
  unsigned short v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_BFu9s_BFu15ll) C1{ Fs:9 Fs:9 FL:15}



static void Test_BFu9s_BFu9s_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu9s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, 1, "BFu9s_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu9s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu15ll, BFu9s_BFu9s_BFu15ll)
//============================================================================


struct  BFu9s_BFu9s_BFu15s  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu9s_BFu9s_BFu15s) C1{ Fs:9 Fs:9 Fs:15}



static void Test_BFu9s_BFu9s_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu15s");
    static STRUCT_IF_C BFu9s_BFu9s_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu9s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu9s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu9s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu15s, BFu9s_BFu9s_BFu15s)
//============================================================================


struct  BFu9s_BFu9s_BFu16i  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu9s_BFu9s_BFu16i) C1{ Fs:9 Fs:9 Fi:16}



static void Test_BFu9s_BFu9s_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu16i");
    static STRUCT_IF_C BFu9s_BFu9s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu9s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu16i, BFu9s_BFu9s_BFu16i)
//============================================================================


struct  BFu9s_BFu9s_BFu16ll  {
  unsigned short v1:9;
  unsigned short v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_BFu9s_BFu16ll) C1{ Fs:9 Fs:9 FL:16}



static void Test_BFu9s_BFu9s_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu9s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, 1, "BFu9s_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu9s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu16ll, BFu9s_BFu9s_BFu16ll)
//============================================================================


struct  BFu9s_BFu9s_BFu16s  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu9s_BFu9s_BFu16s) C1{ Fs:9 Fs:9 Fs:16}



static void Test_BFu9s_BFu9s_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu16s");
    static STRUCT_IF_C BFu9s_BFu9s_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu9s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu9s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu9s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu16s, BFu9s_BFu9s_BFu16s)
//============================================================================


struct  BFu9s_BFu9s_BFu17i  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu9s_BFu9s_BFu17i) C1{ Fs:9 Fs:9 Fi:17}



static void Test_BFu9s_BFu9s_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu17i");
    static STRUCT_IF_C BFu9s_BFu9s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu9s_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu9s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu17i, BFu9s_BFu9s_BFu17i)
//============================================================================


struct  BFu9s_BFu9s_BFu17ll  {
  unsigned short v1:9;
  unsigned short v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_BFu9s_BFu17ll) C1{ Fs:9 Fs:9 FL:17}



static void Test_BFu9s_BFu9s_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu9s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, 1, "BFu9s_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu9s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu17ll, BFu9s_BFu9s_BFu17ll)
//============================================================================


struct  BFu9s_BFu9s_BFu1c  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu9s_BFu9s_BFu1c) C1{ Fs:9 Fs:9 Fc:1}



static void Test_BFu9s_BFu9s_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu1c");
    static STRUCT_IF_C BFu9s_BFu9s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu9s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu1c");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu9s_BFu9s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu1c, BFu9s_BFu9s_BFu1c)
//============================================================================


struct  BFu9s_BFu9s_BFu1i  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu9s_BFu9s_BFu1i) C1{ Fs:9 Fs:9 Fi:1}



static void Test_BFu9s_BFu9s_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu1i");
    static STRUCT_IF_C BFu9s_BFu9s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu1i");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu9s_BFu9s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu1i, BFu9s_BFu9s_BFu1i)
//============================================================================


struct  BFu9s_BFu9s_BFu1ll  {
  unsigned short v1:9;
  unsigned short v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_BFu9s_BFu1ll) C1{ Fs:9 Fs:9 FL:1}



static void Test_BFu9s_BFu9s_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu9s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu1ll");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu9s_BFu9s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu1ll, BFu9s_BFu9s_BFu1ll)
//============================================================================


struct  BFu9s_BFu9s_BFu1s  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu9s_BFu9s_BFu1s) C1{ Fs:9 Fs:9 Fs:1}



static void Test_BFu9s_BFu9s_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu1s");
    static STRUCT_IF_C BFu9s_BFu9s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu9s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu1s");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu9s_BFu9s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu1s, BFu9s_BFu9s_BFu1s)
//============================================================================


struct  BFu9s_BFu9s_BFu31i  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu9s_BFu9s_BFu31i) C1{ Fs:9 Fs:9 Fi:31}



static void Test_BFu9s_BFu9s_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu31i");
    static STRUCT_IF_C BFu9s_BFu9s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_BFu9s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu9s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu31i, BFu9s_BFu9s_BFu31i)
//============================================================================


struct  BFu9s_BFu9s_BFu31ll  {
  unsigned short v1:9;
  unsigned short v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_BFu9s_BFu31ll) C1{ Fs:9 Fs:9 FL:31}



static void Test_BFu9s_BFu9s_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu9s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, 1, "BFu9s_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu9s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu31ll, BFu9s_BFu9s_BFu31ll)
//============================================================================


struct  BFu9s_BFu9s_BFu32i  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu9s_BFu9s_BFu32i) C1{ Fs:9 Fs:9 Fi:32}



static void Test_BFu9s_BFu9s_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu32i");
    static STRUCT_IF_C BFu9s_BFu9s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_BFu9s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu9s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu32i, BFu9s_BFu9s_BFu32i)
//============================================================================


struct  BFu9s_BFu9s_BFu32ll  {
  unsigned short v1:9;
  unsigned short v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_BFu9s_BFu32ll) C1{ Fs:9 Fs:9 FL:32}



static void Test_BFu9s_BFu9s_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu9s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, 1, "BFu9s_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu9s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu32ll, BFu9s_BFu9s_BFu32ll)
//============================================================================


struct  BFu9s_BFu9s_BFu33  {
  unsigned short v1:9;
  unsigned short v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_BFu9s_BFu33) C1{ Fs:9 Fs:9 FL:33}



static void Test_BFu9s_BFu9s_BFu33()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu33");
    static STRUCT_IF_C BFu9s_BFu9s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, 1, "BFu9s_BFu9s_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu9s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu33, BFu9s_BFu9s_BFu33)
//============================================================================


struct  BFu9s_BFu9s_BFu7c  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu9s_BFu9s_BFu7c) C1{ Fs:9 Fs:9 Fc:7}



static void Test_BFu9s_BFu9s_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu7c");
    static STRUCT_IF_C BFu9s_BFu9s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu9s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu9s_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu9s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu7c, BFu9s_BFu9s_BFu7c)
//============================================================================


struct  BFu9s_BFu9s_BFu7i  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu9s_BFu9s_BFu7i) C1{ Fs:9 Fs:9 Fi:7}



static void Test_BFu9s_BFu9s_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu7i");
    static STRUCT_IF_C BFu9s_BFu9s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu9s_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu9s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu7i, BFu9s_BFu9s_BFu7i)
//============================================================================


struct  BFu9s_BFu9s_BFu7ll  {
  unsigned short v1:9;
  unsigned short v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_BFu9s_BFu7ll) C1{ Fs:9 Fs:9 FL:7}



static void Test_BFu9s_BFu9s_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu9s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu9s_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu9s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu7ll, BFu9s_BFu9s_BFu7ll)
//============================================================================


struct  BFu9s_BFu9s_BFu7s  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu9s_BFu9s_BFu7s) C1{ Fs:9 Fs:9 Fs:7}



static void Test_BFu9s_BFu9s_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu7s");
    static STRUCT_IF_C BFu9s_BFu9s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu9s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu9s_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu9s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu7s, BFu9s_BFu9s_BFu7s)
//============================================================================


struct  BFu9s_BFu9s_BFu8c  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu9s_BFu9s_BFu8c) C1{ Fs:9 Fs:9 Fc:8}



static void Test_BFu9s_BFu9s_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu8c");
    static STRUCT_IF_C BFu9s_BFu9s_BFu8c lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu9s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu9s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu9s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu8c, BFu9s_BFu9s_BFu8c)
//============================================================================


struct  BFu9s_BFu9s_BFu8i  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu9s_BFu9s_BFu8i) C1{ Fs:9 Fs:9 Fi:8}



static void Test_BFu9s_BFu9s_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu8i");
    static STRUCT_IF_C BFu9s_BFu9s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu9s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu8i, BFu9s_BFu9s_BFu8i)
//============================================================================


struct  BFu9s_BFu9s_BFu8ll  {
  unsigned short v1:9;
  unsigned short v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_BFu9s_BFu8ll) C1{ Fs:9 Fs:9 FL:8}



static void Test_BFu9s_BFu9s_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu9s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, 1, "BFu9s_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu9s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu8ll, BFu9s_BFu9s_BFu8ll)
//============================================================================


struct  BFu9s_BFu9s_BFu8s  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu9s_BFu9s_BFu8s) C1{ Fs:9 Fs:9 Fs:8}



static void Test_BFu9s_BFu9s_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu8s");
    static STRUCT_IF_C BFu9s_BFu9s_BFu8s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu9s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu9s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu9s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu8s, BFu9s_BFu9s_BFu8s)
//============================================================================


struct  BFu9s_BFu9s_BFu9i  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu9s_BFu9s_BFu9i) C1{ Fs:9 Fs:9 Fi:9}



static void Test_BFu9s_BFu9s_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu9i");
    static STRUCT_IF_C BFu9s_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu9i, BFu9s_BFu9s_BFu9i)
//============================================================================


struct  BFu9s_BFu9s_BFu9i_BFs9i  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned int v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFu9s_BFu9i_BFs9i) C1{ Fs:9 Fs:9 Fi:9 Fi:9}



static void Test_BFu9s_BFu9s_BFu9i_BFs9i()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu9i_BFs9i");
    static STRUCT_IF_C BFu9s_BFu9s_BFu9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9s_BFu9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFu9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu9i_BFs9i, BFu9s_BFu9s_BFu9i_BFs9i)
//============================================================================


struct  BFu9s_BFu9s_BFu9i_BFs9ll  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFu9s_BFu9i_BFs9ll) C1{ Fs:9 Fs:9 Fi:9 FL:9}



static void Test_BFu9s_BFu9s_BFu9i_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu9i_BFs9ll");
    static STRUCT_IF_C BFu9s_BFu9s_BFu9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFu9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFu9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu9i_BFs9ll, BFu9s_BFu9s_BFu9i_BFs9ll)
//============================================================================


struct  BFu9s_BFu9s_BFu9i_BFs9s  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned int v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFu9s_BFu9i_BFs9s) C1{ Fs:9 Fs:9 Fi:9 Fs:9}



static void Test_BFu9s_BFu9s_BFu9i_BFs9s()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu9i_BFs9s");
    static STRUCT_IF_C BFu9s_BFu9s_BFu9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9s_BFu9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFu9s_BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFu9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu9i_BFs9s, BFu9s_BFu9s_BFu9i_BFs9s)
//============================================================================


struct  BFu9s_BFu9s_BFu9i_BFu9i  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFu9s_BFu9i_BFu9i) C1{ Fs:9 Fs:9 Fi:9 Fi:9}



static void Test_BFu9s_BFu9s_BFu9i_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu9i_BFu9i");
    static STRUCT_IF_C BFu9s_BFu9s_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9s_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu9i_BFu9i, BFu9s_BFu9s_BFu9i_BFu9i)
//============================================================================


struct  BFu9s_BFu9s_BFu9i_BFu9ll  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFu9s_BFu9i_BFu9ll) C1{ Fs:9 Fs:9 Fi:9 FL:9}



static void Test_BFu9s_BFu9s_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu9i_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu9s_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu9i_BFu9ll, BFu9s_BFu9s_BFu9i_BFu9ll)
//============================================================================


struct  BFu9s_BFu9s_BFu9i_BFu9s  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFu9s_BFu9i_BFu9s) C1{ Fs:9 Fs:9 Fi:9 Fs:9}



static void Test_BFu9s_BFu9s_BFu9i_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu9i_BFu9s");
    static STRUCT_IF_C BFu9s_BFu9s_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9s_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFu9s_BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu9i_BFu9s, BFu9s_BFu9s_BFu9i_BFu9s)
//============================================================================


struct  BFu9s_BFu9s_BFu9ll  {
  unsigned short v1:9;
  unsigned short v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_BFu9s_BFu9ll) C1{ Fs:9 Fs:9 FL:9}



static void Test_BFu9s_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu9ll, BFu9s_BFu9s_BFu9ll)
//============================================================================


struct  BFu9s_BFu9s_BFu9ll_BFs9i  {
  unsigned short v1:9;
  unsigned short v2:9;
  __tsu64 v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFu9s_BFu9ll_BFs9i) C1{ Fs:9 Fs:9 FL:9 Fi:9}



static void Test_BFu9s_BFu9s_BFu9ll_BFs9i()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu9ll_BFs9i");
    static STRUCT_IF_C BFu9s_BFu9s_BFu9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFu9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFu9s_BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFu9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu9ll_BFs9i, BFu9s_BFu9s_BFu9ll_BFs9i)
//============================================================================


struct  BFu9s_BFu9s_BFu9ll_BFs9ll  {
  unsigned short v1:9;
  unsigned short v2:9;
  __tsu64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFu9s_BFu9ll_BFs9ll) C1{ Fs:9 Fs:9 FL:9 FL:9}



static void Test_BFu9s_BFu9s_BFu9ll_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu9ll_BFs9ll");
    static STRUCT_IF_C BFu9s_BFu9s_BFu9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFu9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFu9s_BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFu9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu9ll_BFs9ll, BFu9s_BFu9s_BFu9ll_BFs9ll)
//============================================================================


struct  BFu9s_BFu9s_BFu9ll_BFs9s  {
  unsigned short v1:9;
  unsigned short v2:9;
  __tsu64 v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFu9s_BFu9ll_BFs9s) C1{ Fs:9 Fs:9 FL:9 Fs:9}



static void Test_BFu9s_BFu9s_BFu9ll_BFs9s()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu9ll_BFs9s");
    static STRUCT_IF_C BFu9s_BFu9s_BFu9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFu9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFu9s_BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFu9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu9ll_BFs9s, BFu9s_BFu9s_BFu9ll_BFs9s)
//============================================================================


struct  BFu9s_BFu9s_BFu9ll_BFu9i  {
  unsigned short v1:9;
  unsigned short v2:9;
  __tsu64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFu9s_BFu9ll_BFu9i) C1{ Fs:9 Fs:9 FL:9 Fi:9}



static void Test_BFu9s_BFu9s_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu9ll_BFu9i");
    static STRUCT_IF_C BFu9s_BFu9s_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFu9s_BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu9ll_BFu9i, BFu9s_BFu9s_BFu9ll_BFu9i)
//============================================================================


struct  BFu9s_BFu9s_BFu9ll_BFu9ll  {
  unsigned short v1:9;
  unsigned short v2:9;
  __tsu64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFu9s_BFu9ll_BFu9ll) C1{ Fs:9 Fs:9 FL:9 FL:9}



static void Test_BFu9s_BFu9s_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu9s_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFu9s_BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu9ll_BFu9ll, BFu9s_BFu9s_BFu9ll_BFu9ll)
//============================================================================


struct  BFu9s_BFu9s_BFu9ll_BFu9s  {
  unsigned short v1:9;
  unsigned short v2:9;
  __tsu64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFu9s_BFu9ll_BFu9s) C1{ Fs:9 Fs:9 FL:9 Fs:9}



static void Test_BFu9s_BFu9s_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu9ll_BFu9s");
    static STRUCT_IF_C BFu9s_BFu9s_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu9s_BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFu9s_BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu9ll_BFu9s, BFu9s_BFu9s_BFu9ll_BFu9s)
//============================================================================


struct  BFu9s_BFu9s_BFu9s  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu9s_BFu9s_BFu9s) C1{ Fs:9 Fs:9 Fs:9}



static void Test_BFu9s_BFu9s_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu9s");
    static STRUCT_IF_C BFu9s_BFu9s_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu9s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu9s, BFu9s_BFu9s_BFu9s)
//============================================================================


struct  BFu9s_BFu9s_BFu9s_BFs9i  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned short v3:9;
  signed int v4:9;
};
//SIG(1 BFu9s_BFu9s_BFu9s_BFs9i) C1{ Fs:9 Fs:9 Fs:9 Fi:9}



static void Test_BFu9s_BFu9s_BFu9s_BFs9i()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu9s_BFs9i");
    static STRUCT_IF_C BFu9s_BFu9s_BFu9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9s_BFu9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFu9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu9s_BFs9i, BFu9s_BFu9s_BFu9s_BFs9i)
//============================================================================


struct  BFu9s_BFu9s_BFu9s_BFs9ll  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFu9s_BFu9s_BFu9s_BFs9ll) C1{ Fs:9 Fs:9 Fs:9 FL:9}



static void Test_BFu9s_BFu9s_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu9s_BFs9ll");
    static STRUCT_IF_C BFu9s_BFu9s_BFu9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu9s_BFs9ll, BFu9s_BFu9s_BFu9s_BFs9ll)
//============================================================================


struct  BFu9s_BFu9s_BFu9s_BFs9s  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned short v3:9;
  signed short v4:9;
};
//SIG(1 BFu9s_BFu9s_BFu9s_BFs9s) C1{ Fs:9 Fs:9 Fs:9 Fs:9}



static void Test_BFu9s_BFu9s_BFu9s_BFs9s()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu9s_BFs9s");
    static STRUCT_IF_C BFu9s_BFu9s_BFu9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu9s_BFs9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu9s_BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFu9s_BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFu9s_BFu9s_BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu9s_BFs9s, BFu9s_BFu9s_BFu9s_BFs9s)
//============================================================================


struct  BFu9s_BFu9s_BFu9s_BFu9i  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFu9s_BFu9s_BFu9s_BFu9i) C1{ Fs:9 Fs:9 Fs:9 Fi:9}



static void Test_BFu9s_BFu9s_BFu9s_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu9s_BFu9i");
    static STRUCT_IF_C BFu9s_BFu9s_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9s_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu9s_BFu9i, BFu9s_BFu9s_BFu9s_BFu9i)
//============================================================================


struct  BFu9s_BFu9s_BFu9s_BFu9ll  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFu9s_BFu9s_BFu9s_BFu9ll) C1{ Fs:9 Fs:9 Fs:9 FL:9}



static void Test_BFu9s_BFu9s_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu9s_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu9s_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFu9s_BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu9s_BFu9ll, BFu9s_BFu9s_BFu9s_BFu9ll)
//============================================================================


struct  BFu9s_BFu9s_BFu9s_BFu9s  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFu9s_BFu9s_BFu9s_BFu9s) C1{ Fs:9 Fs:9 Fs:9 Fs:9}



static void Test_BFu9s_BFu9s_BFu9s_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu9s_BFu9s");
    static STRUCT_IF_C BFu9s_BFu9s_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_BFu9s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu9s_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFu9s_BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu9s_BFu9s, BFu9s_BFu9s_BFu9s_BFu9s)
//============================================================================


struct  BFu9s_BFu9s_C  {
  unsigned short v1:9;
  unsigned short v2:9;
  char v3;
};
//SIG(1 BFu9s_BFu9s_C) C1{ Fs:9 Fs:9 Fc}



static void Test_BFu9s_BFu9s_C()
{
  {
    init_simple_test("BFu9s_BFu9s_C");
    static STRUCT_IF_C BFu9s_BFu9s_C lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu9s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu9s_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_C");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_C");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_C");
    check_field_offset(lv, v3, 4, "BFu9s_BFu9s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_C, BFu9s_BFu9s_C)
//============================================================================


struct  BFu9s_BFu9s_D  {
  unsigned short v1:9;
  unsigned short v2:9;
  double v3;
};
//SIG(1 BFu9s_BFu9s_D) C1{ Fs:9 Fs:9 FL}



static void Test_BFu9s_BFu9s_D()
{
  {
    init_simple_test("BFu9s_BFu9s_D");
    static STRUCT_IF_C BFu9s_BFu9s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu9s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_D");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_D");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu9s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_D, BFu9s_BFu9s_D)
//============================================================================


struct  BFu9s_BFu9s_F  {
  unsigned short v1:9;
  unsigned short v2:9;
  float v3;
};
//SIG(1 BFu9s_BFu9s_F) C1{ Fs:9 Fs:9 Fi}



static void Test_BFu9s_BFu9s_F()
{
  {
    init_simple_test("BFu9s_BFu9s_F");
    static STRUCT_IF_C BFu9s_BFu9s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9s_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_F");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_F");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_F");
    check_field_offset(lv, v3, 4, "BFu9s_BFu9s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_F, BFu9s_BFu9s_F)
//============================================================================


struct  BFu9s_BFu9s_I  {
  unsigned short v1:9;
  unsigned short v2:9;
  int v3;
};
//SIG(1 BFu9s_BFu9s_I) C1{ Fs:9 Fs:9 Fi}



static void Test_BFu9s_BFu9s_I()
{
  {
    init_simple_test("BFu9s_BFu9s_I");
    static STRUCT_IF_C BFu9s_BFu9s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9s_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_I");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_I");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_I");
    check_field_offset(lv, v3, 4, "BFu9s_BFu9s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_I, BFu9s_BFu9s_I)
//============================================================================


struct  BFu9s_BFu9s_Ip  {
  unsigned short v1:9;
  unsigned short v2:9;
  int *v3;
};
//SIG(1 BFu9s_BFu9s_Ip) C1{ Fs:9 Fs:9 Fp}



static void Test_BFu9s_BFu9s_Ip()
{
  {
    init_simple_test("BFu9s_BFu9s_Ip");
    static STRUCT_IF_C BFu9s_BFu9s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu9s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu9s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_Ip, BFu9s_BFu9s_Ip)
//============================================================================


struct  BFu9s_BFu9s_L  {
  unsigned short v1:9;
  unsigned short v2:9;
  __tsi64 v3;
};
//SIG(1 BFu9s_BFu9s_L) C1{ Fs:9 Fs:9 FL}



static void Test_BFu9s_BFu9s_L()
{
  {
    init_simple_test("BFu9s_BFu9s_L");
    static STRUCT_IF_C BFu9s_BFu9s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu9s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_L");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_L");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu9s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_L, BFu9s_BFu9s_L)
//============================================================================


struct  BFu9s_BFu9s_S  {
  unsigned short v1:9;
  unsigned short v2:9;
  short v3;
};
//SIG(1 BFu9s_BFu9s_S) C1{ Fs:9 Fs:9 Fs}



static void Test_BFu9s_BFu9s_S()
{
  {
    init_simple_test("BFu9s_BFu9s_S");
    static STRUCT_IF_C BFu9s_BFu9s_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu9s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu9s_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_S");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_S");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_S");
    check_field_offset(lv, v3, 4, "BFu9s_BFu9s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_S, BFu9s_BFu9s_S)
//============================================================================


struct  BFu9s_BFu9s_Uc  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned char v3;
};
//SIG(1 BFu9s_BFu9s_Uc) C1{ Fs:9 Fs:9 Fc}



static void Test_BFu9s_BFu9s_Uc()
{
  {
    init_simple_test("BFu9s_BFu9s_Uc");
    static STRUCT_IF_C BFu9s_BFu9s_Uc lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu9s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu9s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_Uc");
    check_field_offset(lv, v3, 4, "BFu9s_BFu9s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_Uc, BFu9s_BFu9s_Uc)
//============================================================================


struct  BFu9s_BFu9s_Ui  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned int v3;
};
//SIG(1 BFu9s_BFu9s_Ui) C1{ Fs:9 Fs:9 Fi}



static void Test_BFu9s_BFu9s_Ui()
{
  {
    init_simple_test("BFu9s_BFu9s_Ui");
    static STRUCT_IF_C BFu9s_BFu9s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu9s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_Ui");
    check_field_offset(lv, v3, 4, "BFu9s_BFu9s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_Ui, BFu9s_BFu9s_Ui)
//============================================================================


struct  BFu9s_BFu9s_Ul  {
  unsigned short v1:9;
  unsigned short v2:9;
  __tsu64 v3;
};
//SIG(1 BFu9s_BFu9s_Ul) C1{ Fs:9 Fs:9 FL}



static void Test_BFu9s_BFu9s_Ul()
{
  {
    init_simple_test("BFu9s_BFu9s_Ul");
    static STRUCT_IF_C BFu9s_BFu9s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu9s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu9s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_Ul, BFu9s_BFu9s_Ul)
//============================================================================


struct  BFu9s_BFu9s_Us  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned short v3;
};
//SIG(1 BFu9s_BFu9s_Us) C1{ Fs:9 Fs:9 Fs}



static void Test_BFu9s_BFu9s_Us()
{
  {
    init_simple_test("BFu9s_BFu9s_Us");
    static STRUCT_IF_C BFu9s_BFu9s_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_BFu9s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu9s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_Us");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_Us");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_Us");
    check_field_offset(lv, v3, 4, "BFu9s_BFu9s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_Us, BFu9s_BFu9s_Us)
//============================================================================


struct  BFu9s_BFu9s_Vp  {
  unsigned short v1:9;
  unsigned short v2:9;
  void *v3;
};
//SIG(1 BFu9s_BFu9s_Vp) C1{ Fs:9 Fs:9 Fp}



static void Test_BFu9s_BFu9s_Vp()
{
  {
    init_simple_test("BFu9s_BFu9s_Vp");
    static STRUCT_IF_C BFu9s_BFu9s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu9s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_BFu9s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_Vp, BFu9s_BFu9s_Vp)
//============================================================================


struct  BFu9s_C  {
  unsigned short v1:9;
  char v2;
};
//SIG(1 BFu9s_C) C1{ Fs:9 Fc}



static void Test_BFu9s_C()
{
  {
    init_simple_test("BFu9s_C");
    static STRUCT_IF_C BFu9s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C");
    check_field_offset(lv, v2, 2, "BFu9s_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C, BFu9s_C)
//============================================================================


struct  BFu9s_C_BFu15i  {
  unsigned short v1:9;
  char v2;
  unsigned int v3:15;
};
//SIG(1 BFu9s_C_BFu15i) C1{ Fs:9 Fc Fi:15}



static void Test_BFu9s_C_BFu15i()
{
  {
    init_simple_test("BFu9s_C_BFu15i");
    static STRUCT_IF_C BFu9s_C_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_C_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_C_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu15i");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_C_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_C_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu15i, BFu9s_C_BFu15i)
//============================================================================


struct  BFu9s_C_BFu15ll  {
  unsigned short v1:9;
  char v2;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_C_BFu15ll) C1{ Fs:9 Fc FL:15}



static void Test_BFu9s_C_BFu15ll()
{
  {
    init_simple_test("BFu9s_C_BFu15ll");
    static STRUCT_IF_C BFu9s_C_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_C_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_C_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu15ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu9s_C_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu9s_C_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu15ll, BFu9s_C_BFu15ll)
//============================================================================


struct  BFu9s_C_BFu15s  {
  unsigned short v1:9;
  char v2;
  unsigned short v3:15;
};
//SIG(1 BFu9s_C_BFu15s) C1{ Fs:9 Fc Fs:15}



static void Test_BFu9s_C_BFu15s()
{
  {
    init_simple_test("BFu9s_C_BFu15s");
    static STRUCT_IF_C BFu9s_C_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_C_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_C_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu15s");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_C_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_C_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu15s, BFu9s_C_BFu15s)
//============================================================================


struct  BFu9s_C_BFu16i  {
  unsigned short v1:9;
  char v2;
  unsigned int v3:16;
};
//SIG(1 BFu9s_C_BFu16i) C1{ Fs:9 Fc Fi:16}



static void Test_BFu9s_C_BFu16i()
{
  {
    init_simple_test("BFu9s_C_BFu16i");
    static STRUCT_IF_C BFu9s_C_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_C_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_C_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu16i");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_C_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_C_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu16i, BFu9s_C_BFu16i)
//============================================================================


struct  BFu9s_C_BFu16ll  {
  unsigned short v1:9;
  char v2;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_C_BFu16ll) C1{ Fs:9 Fc FL:16}



static void Test_BFu9s_C_BFu16ll()
{
  {
    init_simple_test("BFu9s_C_BFu16ll");
    static STRUCT_IF_C BFu9s_C_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_C_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_C_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu16ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu9s_C_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu9s_C_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu16ll, BFu9s_C_BFu16ll)
//============================================================================


struct  BFu9s_C_BFu16s  {
  unsigned short v1:9;
  char v2;
  unsigned short v3:16;
};
//SIG(1 BFu9s_C_BFu16s) C1{ Fs:9 Fc Fs:16}



static void Test_BFu9s_C_BFu16s()
{
  {
    init_simple_test("BFu9s_C_BFu16s");
    static STRUCT_IF_C BFu9s_C_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_C_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_C_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu16s");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_C_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_C_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu16s, BFu9s_C_BFu16s)
//============================================================================


struct  BFu9s_C_BFu17i  {
  unsigned short v1:9;
  char v2;
  unsigned int v3:17;
};
//SIG(1 BFu9s_C_BFu17i) C1{ Fs:9 Fc Fi:17}



static void Test_BFu9s_C_BFu17i()
{
  {
    init_simple_test("BFu9s_C_BFu17i");
    static STRUCT_IF_C BFu9s_C_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_C_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_C_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu17i");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu9s_C_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_C_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu17i, BFu9s_C_BFu17i)
//============================================================================


struct  BFu9s_C_BFu17ll  {
  unsigned short v1:9;
  char v2;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_C_BFu17ll) C1{ Fs:9 Fc FL:17}



static void Test_BFu9s_C_BFu17ll()
{
  {
    init_simple_test("BFu9s_C_BFu17ll");
    static STRUCT_IF_C BFu9s_C_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_C_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_C_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu17ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu9s_C_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu9s_C_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu17ll, BFu9s_C_BFu17ll)
//============================================================================


struct  BFu9s_C_BFu1c  {
  unsigned short v1:9;
  char v2;
  unsigned char v3:1;
};
//SIG(1 BFu9s_C_BFu1c) C1{ Fs:9 Fc Fc:1}



static void Test_BFu9s_C_BFu1c()
{
  {
    init_simple_test("BFu9s_C_BFu1c");
    static STRUCT_IF_C BFu9s_C_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_C_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_C_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu1c");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu1c.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu9s_C_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu1c, BFu9s_C_BFu1c)
//============================================================================


struct  BFu9s_C_BFu1i  {
  unsigned short v1:9;
  char v2;
  unsigned int v3:1;
};
//SIG(1 BFu9s_C_BFu1i) C1{ Fs:9 Fc Fi:1}



static void Test_BFu9s_C_BFu1i()
{
  {
    init_simple_test("BFu9s_C_BFu1i");
    static STRUCT_IF_C BFu9s_C_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_C_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_C_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu1i");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu1i.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu9s_C_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu1i, BFu9s_C_BFu1i)
//============================================================================


struct  BFu9s_C_BFu1ll  {
  unsigned short v1:9;
  char v2;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_C_BFu1ll) C1{ Fs:9 Fc FL:1}



static void Test_BFu9s_C_BFu1ll()
{
  {
    init_simple_test("BFu9s_C_BFu1ll");
    static STRUCT_IF_C BFu9s_C_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_C_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_C_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu1ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu9s_C_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu1ll, BFu9s_C_BFu1ll)
//============================================================================


struct  BFu9s_C_BFu1s  {
  unsigned short v1:9;
  char v2;
  unsigned short v3:1;
};
//SIG(1 BFu9s_C_BFu1s) C1{ Fs:9 Fc Fs:1}



static void Test_BFu9s_C_BFu1s()
{
  {
    init_simple_test("BFu9s_C_BFu1s");
    static STRUCT_IF_C BFu9s_C_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_C_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_C_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu1s");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu1s.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu9s_C_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu1s, BFu9s_C_BFu1s)
//============================================================================


struct  BFu9s_C_BFu31i  {
  unsigned short v1:9;
  char v2;
  unsigned int v3:31;
};
//SIG(1 BFu9s_C_BFu31i) C1{ Fs:9 Fc Fi:31}



static void Test_BFu9s_C_BFu31i()
{
  {
    init_simple_test("BFu9s_C_BFu31i");
    static STRUCT_IF_C BFu9s_C_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_C_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_C_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu31i");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_C_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_C_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu31i, BFu9s_C_BFu31i)
//============================================================================


struct  BFu9s_C_BFu31ll  {
  unsigned short v1:9;
  char v2;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_C_BFu31ll) C1{ Fs:9 Fc FL:31}



static void Test_BFu9s_C_BFu31ll()
{
  {
    init_simple_test("BFu9s_C_BFu31ll");
    static STRUCT_IF_C BFu9s_C_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_C_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_C_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu31ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu9s_C_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu9s_C_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu31ll, BFu9s_C_BFu31ll)
//============================================================================


struct  BFu9s_C_BFu32i  {
  unsigned short v1:9;
  char v2;
  unsigned int v3:32;
};
//SIG(1 BFu9s_C_BFu32i) C1{ Fs:9 Fc Fi:32}



static void Test_BFu9s_C_BFu32i()
{
  {
    init_simple_test("BFu9s_C_BFu32i");
    static STRUCT_IF_C BFu9s_C_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_C_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_C_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu32i");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_C_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_C_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu32i, BFu9s_C_BFu32i)
//============================================================================


struct  BFu9s_C_BFu32ll  {
  unsigned short v1:9;
  char v2;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_C_BFu32ll) C1{ Fs:9 Fc FL:32}



static void Test_BFu9s_C_BFu32ll()
{
  {
    init_simple_test("BFu9s_C_BFu32ll");
    static STRUCT_IF_C BFu9s_C_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_C_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_C_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu32ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu9s_C_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu9s_C_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu32ll, BFu9s_C_BFu32ll)
//============================================================================


struct  BFu9s_C_BFu33  {
  unsigned short v1:9;
  char v2;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_C_BFu33) C1{ Fs:9 Fc FL:33}



static void Test_BFu9s_C_BFu33()
{
  {
    init_simple_test("BFu9s_C_BFu33");
    static STRUCT_IF_C BFu9s_C_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_C_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_C_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu33");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu33.v2");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu9s_C_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu9s_C_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu33, BFu9s_C_BFu33)
//============================================================================


struct  BFu9s_C_BFu7c  {
  unsigned short v1:9;
  char v2;
  unsigned char v3:7;
};
//SIG(1 BFu9s_C_BFu7c) C1{ Fs:9 Fc Fc:7}



static void Test_BFu9s_C_BFu7c()
{
  {
    init_simple_test("BFu9s_C_BFu7c");
    static STRUCT_IF_C BFu9s_C_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_C_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_C_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu7c");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu7c.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu9s_C_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu9s_C_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu7c, BFu9s_C_BFu7c)
//============================================================================


struct  BFu9s_C_BFu7i  {
  unsigned short v1:9;
  char v2;
  unsigned int v3:7;
};
//SIG(1 BFu9s_C_BFu7i) C1{ Fs:9 Fc Fi:7}



static void Test_BFu9s_C_BFu7i()
{
  {
    init_simple_test("BFu9s_C_BFu7i");
    static STRUCT_IF_C BFu9s_C_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_C_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_C_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu7i");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu7i.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu9s_C_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu9s_C_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu7i, BFu9s_C_BFu7i)
//============================================================================


struct  BFu9s_C_BFu7ll  {
  unsigned short v1:9;
  char v2;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_C_BFu7ll) C1{ Fs:9 Fc FL:7}



static void Test_BFu9s_C_BFu7ll()
{
  {
    init_simple_test("BFu9s_C_BFu7ll");
    static STRUCT_IF_C BFu9s_C_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_C_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_C_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu7ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu9s_C_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu9s_C_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu7ll, BFu9s_C_BFu7ll)
//============================================================================


struct  BFu9s_C_BFu7s  {
  unsigned short v1:9;
  char v2;
  unsigned short v3:7;
};
//SIG(1 BFu9s_C_BFu7s) C1{ Fs:9 Fc Fs:7}



static void Test_BFu9s_C_BFu7s()
{
  {
    init_simple_test("BFu9s_C_BFu7s");
    static STRUCT_IF_C BFu9s_C_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_C_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_C_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu7s");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu7s.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu9s_C_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu9s_C_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu7s, BFu9s_C_BFu7s)
//============================================================================


struct  BFu9s_C_BFu8c  {
  unsigned short v1:9;
  char v2;
  unsigned char v3:8;
};
//SIG(1 BFu9s_C_BFu8c) C1{ Fs:9 Fc Fc:8}



static void Test_BFu9s_C_BFu8c()
{
  {
    init_simple_test("BFu9s_C_BFu8c");
    static STRUCT_IF_C BFu9s_C_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_C_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_C_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu8c");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu8c.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu9s_C_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu9s_C_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu8c, BFu9s_C_BFu8c)
//============================================================================


struct  BFu9s_C_BFu8i  {
  unsigned short v1:9;
  char v2;
  unsigned int v3:8;
};
//SIG(1 BFu9s_C_BFu8i) C1{ Fs:9 Fc Fi:8}



static void Test_BFu9s_C_BFu8i()
{
  {
    init_simple_test("BFu9s_C_BFu8i");
    static STRUCT_IF_C BFu9s_C_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_C_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_C_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu8i");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu8i.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu9s_C_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu9s_C_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu8i, BFu9s_C_BFu8i)
//============================================================================


struct  BFu9s_C_BFu8ll  {
  unsigned short v1:9;
  char v2;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_C_BFu8ll) C1{ Fs:9 Fc FL:8}



static void Test_BFu9s_C_BFu8ll()
{
  {
    init_simple_test("BFu9s_C_BFu8ll");
    static STRUCT_IF_C BFu9s_C_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_C_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_C_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu8ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu9s_C_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu9s_C_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu8ll, BFu9s_C_BFu8ll)
//============================================================================


struct  BFu9s_C_BFu8s  {
  unsigned short v1:9;
  char v2;
  unsigned short v3:8;
};
//SIG(1 BFu9s_C_BFu8s) C1{ Fs:9 Fc Fs:8}



static void Test_BFu9s_C_BFu8s()
{
  {
    init_simple_test("BFu9s_C_BFu8s");
    static STRUCT_IF_C BFu9s_C_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_C_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_C_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu8s");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu8s.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu9s_C_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu9s_C_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu8s, BFu9s_C_BFu8s)
//============================================================================


struct  BFu9s_C_BFu9i  {
  unsigned short v1:9;
  char v2;
  unsigned int v3:9;
};
//SIG(1 BFu9s_C_BFu9i) C1{ Fs:9 Fc Fi:9}



static void Test_BFu9s_C_BFu9i()
{
  {
    init_simple_test("BFu9s_C_BFu9i");
    static STRUCT_IF_C BFu9s_C_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_C_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_C_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu9i");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_C_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu9i, BFu9s_C_BFu9i)
//============================================================================


struct  BFu9s_C_BFu9ll  {
  unsigned short v1:9;
  char v2;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_C_BFu9ll) C1{ Fs:9 Fc FL:9}



static void Test_BFu9s_C_BFu9ll()
{
  {
    init_simple_test("BFu9s_C_BFu9ll");
    static STRUCT_IF_C BFu9s_C_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_C_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_C_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu9ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu9s_C_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu9ll, BFu9s_C_BFu9ll)
//============================================================================


struct  BFu9s_C_BFu9s  {
  unsigned short v1:9;
  char v2;
  unsigned short v3:9;
};
//SIG(1 BFu9s_C_BFu9s) C1{ Fs:9 Fc Fs:9}



static void Test_BFu9s_C_BFu9s()
{
  {
    init_simple_test("BFu9s_C_BFu9s");
    static STRUCT_IF_C BFu9s_C_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_C_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_C_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu9s");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_C_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu9s, BFu9s_C_BFu9s)
//============================================================================


struct  BFu9s_C_C  {
  unsigned short v1:9;
  char v2;
  char v3;
};
//SIG(1 BFu9s_C_C) C1{ Fs:9 Fc[2]}



static void Test_BFu9s_C_C()
{
  {
    init_simple_test("BFu9s_C_C");
    static STRUCT_IF_C BFu9s_C_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_C_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_C_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_C");
    check_field_offset(lv, v2, 2, "BFu9s_C_C.v2");
    check_field_offset(lv, v3, 3, "BFu9s_C_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_C, BFu9s_C_C)
//============================================================================


struct  BFu9s_C_D  {
  unsigned short v1:9;
  char v2;
  double v3;
};
//SIG(1 BFu9s_C_D) C1{ Fs:9 Fc FL}



static void Test_BFu9s_C_D()
{
  {
    init_simple_test("BFu9s_C_D");
    static STRUCT_IF_C BFu9s_C_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_C_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_C_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_D");
    check_field_offset(lv, v2, 2, "BFu9s_C_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_C_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_D, BFu9s_C_D)
//============================================================================


struct  BFu9s_C_F  {
  unsigned short v1:9;
  char v2;
  float v3;
};
//SIG(1 BFu9s_C_F) C1{ Fs:9 Fc Fi}



static void Test_BFu9s_C_F()
{
  {
    init_simple_test("BFu9s_C_F");
    static STRUCT_IF_C BFu9s_C_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_C_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_C_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_F");
    check_field_offset(lv, v2, 2, "BFu9s_C_F.v2");
    check_field_offset(lv, v3, 4, "BFu9s_C_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_F, BFu9s_C_F)
//============================================================================


struct  BFu9s_C_I  {
  unsigned short v1:9;
  char v2;
  int v3;
};
//SIG(1 BFu9s_C_I) C1{ Fs:9 Fc Fi}



static void Test_BFu9s_C_I()
{
  {
    init_simple_test("BFu9s_C_I");
    static STRUCT_IF_C BFu9s_C_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_C_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_C_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_I");
    check_field_offset(lv, v2, 2, "BFu9s_C_I.v2");
    check_field_offset(lv, v3, 4, "BFu9s_C_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_I, BFu9s_C_I)
//============================================================================


struct  BFu9s_C_Ip  {
  unsigned short v1:9;
  char v2;
  int *v3;
};
//SIG(1 BFu9s_C_Ip) C1{ Fs:9 Fc Fp}



static void Test_BFu9s_C_Ip()
{
  {
    init_simple_test("BFu9s_C_Ip");
    static STRUCT_IF_C BFu9s_C_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_C_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_C_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_Ip");
    check_field_offset(lv, v2, 2, "BFu9s_C_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_C_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_Ip, BFu9s_C_Ip)
//============================================================================


struct  BFu9s_C_L  {
  unsigned short v1:9;
  char v2;
  __tsi64 v3;
};
//SIG(1 BFu9s_C_L) C1{ Fs:9 Fc FL}



static void Test_BFu9s_C_L()
{
  {
    init_simple_test("BFu9s_C_L");
    static STRUCT_IF_C BFu9s_C_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_C_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_C_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_L");
    check_field_offset(lv, v2, 2, "BFu9s_C_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_C_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_L, BFu9s_C_L)
//============================================================================


struct  BFu9s_C_S  {
  unsigned short v1:9;
  char v2;
  short v3;
};
//SIG(1 BFu9s_C_S) C1{ Fs:9 Fc Fs}



static void Test_BFu9s_C_S()
{
  {
    init_simple_test("BFu9s_C_S");
    static STRUCT_IF_C BFu9s_C_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_C_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_C_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_S");
    check_field_offset(lv, v2, 2, "BFu9s_C_S.v2");
    check_field_offset(lv, v3, 4, "BFu9s_C_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_S, BFu9s_C_S)
//============================================================================


struct  BFu9s_C_Uc  {
  unsigned short v1:9;
  char v2;
  unsigned char v3;
};
//SIG(1 BFu9s_C_Uc) C1{ Fs:9 Fc[2]}



static void Test_BFu9s_C_Uc()
{
  {
    init_simple_test("BFu9s_C_Uc");
    static STRUCT_IF_C BFu9s_C_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_C_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_C_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_Uc");
    check_field_offset(lv, v2, 2, "BFu9s_C_Uc.v2");
    check_field_offset(lv, v3, 3, "BFu9s_C_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_Uc, BFu9s_C_Uc)
//============================================================================


struct  BFu9s_C_Ui  {
  unsigned short v1:9;
  char v2;
  unsigned int v3;
};
//SIG(1 BFu9s_C_Ui) C1{ Fs:9 Fc Fi}



static void Test_BFu9s_C_Ui()
{
  {
    init_simple_test("BFu9s_C_Ui");
    static STRUCT_IF_C BFu9s_C_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_C_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_C_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_Ui");
    check_field_offset(lv, v2, 2, "BFu9s_C_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu9s_C_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_Ui, BFu9s_C_Ui)
//============================================================================


struct  BFu9s_C_Ul  {
  unsigned short v1:9;
  char v2;
  __tsu64 v3;
};
//SIG(1 BFu9s_C_Ul) C1{ Fs:9 Fc FL}



static void Test_BFu9s_C_Ul()
{
  {
    init_simple_test("BFu9s_C_Ul");
    static STRUCT_IF_C BFu9s_C_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_C_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_C_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_Ul");
    check_field_offset(lv, v2, 2, "BFu9s_C_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_C_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_Ul, BFu9s_C_Ul)
//============================================================================


struct  BFu9s_C_Us  {
  unsigned short v1:9;
  char v2;
  unsigned short v3;
};
//SIG(1 BFu9s_C_Us) C1{ Fs:9 Fc Fs}



static void Test_BFu9s_C_Us()
{
  {
    init_simple_test("BFu9s_C_Us");
    static STRUCT_IF_C BFu9s_C_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_C_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_C_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_Us");
    check_field_offset(lv, v2, 2, "BFu9s_C_Us.v2");
    check_field_offset(lv, v3, 4, "BFu9s_C_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_Us, BFu9s_C_Us)
//============================================================================


struct  BFu9s_C_Vp  {
  unsigned short v1:9;
  char v2;
  void *v3;
};
//SIG(1 BFu9s_C_Vp) C1{ Fs:9 Fc Fp}



static void Test_BFu9s_C_Vp()
{
  {
    init_simple_test("BFu9s_C_Vp");
    static STRUCT_IF_C BFu9s_C_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_C_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_C_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_Vp");
    check_field_offset(lv, v2, 2, "BFu9s_C_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_C_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_Vp, BFu9s_C_Vp)
//============================================================================


struct  BFu9s_D  {
  unsigned short v1:9;
  double v2;
};
//SIG(1 BFu9s_D) C1{ Fs:9 FL}



static void Test_BFu9s_D()
{
  {
    init_simple_test("BFu9s_D");
    static STRUCT_IF_C BFu9s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D, BFu9s_D)
//============================================================================


struct  BFu9s_D_BFu15i  {
  unsigned short v1:9;
  double v2;
  unsigned int v3:15;
};
//SIG(1 BFu9s_D_BFu15i) C1{ Fs:9 FL Fi:15}



static void Test_BFu9s_D_BFu15i()
{
  {
    init_simple_test("BFu9s_D_BFu15i");
    static STRUCT_IF_C BFu9s_D_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu9s_D_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu9s_D_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu15i, BFu9s_D_BFu15i)
//============================================================================


struct  BFu9s_D_BFu15ll  {
  unsigned short v1:9;
  double v2;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_D_BFu15ll) C1{ Fs:9 FL FL:15}



static void Test_BFu9s_D_BFu15ll()
{
  {
    init_simple_test("BFu9s_D_BFu15ll");
    static STRUCT_IF_C BFu9s_D_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu9s_D_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu9s_D_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu15ll, BFu9s_D_BFu15ll)
//============================================================================


struct  BFu9s_D_BFu15s  {
  unsigned short v1:9;
  double v2;
  unsigned short v3:15;
};
//SIG(1 BFu9s_D_BFu15s) C1{ Fs:9 FL Fs:15}



static void Test_BFu9s_D_BFu15s()
{
  {
    init_simple_test("BFu9s_D_BFu15s");
    static STRUCT_IF_C BFu9s_D_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu9s_D_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu9s_D_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu15s, BFu9s_D_BFu15s)
//============================================================================


struct  BFu9s_D_BFu16i  {
  unsigned short v1:9;
  double v2;
  unsigned int v3:16;
};
//SIG(1 BFu9s_D_BFu16i) C1{ Fs:9 FL Fi:16}



static void Test_BFu9s_D_BFu16i()
{
  {
    init_simple_test("BFu9s_D_BFu16i");
    static STRUCT_IF_C BFu9s_D_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu9s_D_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu9s_D_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu16i, BFu9s_D_BFu16i)
//============================================================================


struct  BFu9s_D_BFu16ll  {
  unsigned short v1:9;
  double v2;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_D_BFu16ll) C1{ Fs:9 FL FL:16}



static void Test_BFu9s_D_BFu16ll()
{
  {
    init_simple_test("BFu9s_D_BFu16ll");
    static STRUCT_IF_C BFu9s_D_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu9s_D_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu9s_D_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu16ll, BFu9s_D_BFu16ll)
//============================================================================


struct  BFu9s_D_BFu16s  {
  unsigned short v1:9;
  double v2;
  unsigned short v3:16;
};
//SIG(1 BFu9s_D_BFu16s) C1{ Fs:9 FL Fs:16}



static void Test_BFu9s_D_BFu16s()
{
  {
    init_simple_test("BFu9s_D_BFu16s");
    static STRUCT_IF_C BFu9s_D_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu9s_D_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu9s_D_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu16s, BFu9s_D_BFu16s)
//============================================================================


struct  BFu9s_D_BFu17i  {
  unsigned short v1:9;
  double v2;
  unsigned int v3:17;
};
//SIG(1 BFu9s_D_BFu17i) C1{ Fs:9 FL Fi:17}



static void Test_BFu9s_D_BFu17i()
{
  {
    init_simple_test("BFu9s_D_BFu17i");
    static STRUCT_IF_C BFu9s_D_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu9s_D_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu9s_D_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu17i, BFu9s_D_BFu17i)
//============================================================================


struct  BFu9s_D_BFu17ll  {
  unsigned short v1:9;
  double v2;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_D_BFu17ll) C1{ Fs:9 FL FL:17}



static void Test_BFu9s_D_BFu17ll()
{
  {
    init_simple_test("BFu9s_D_BFu17ll");
    static STRUCT_IF_C BFu9s_D_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu9s_D_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu9s_D_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu17ll, BFu9s_D_BFu17ll)
//============================================================================


struct  BFu9s_D_BFu1c  {
  unsigned short v1:9;
  double v2;
  unsigned char v3:1;
};
//SIG(1 BFu9s_D_BFu1c) C1{ Fs:9 FL Fc:1}



static void Test_BFu9s_D_BFu1c()
{
  {
    init_simple_test("BFu9s_D_BFu1c");
    static STRUCT_IF_C BFu9s_D_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu9s_D_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu1c, BFu9s_D_BFu1c)
//============================================================================


struct  BFu9s_D_BFu1i  {
  unsigned short v1:9;
  double v2;
  unsigned int v3:1;
};
//SIG(1 BFu9s_D_BFu1i) C1{ Fs:9 FL Fi:1}



static void Test_BFu9s_D_BFu1i()
{
  {
    init_simple_test("BFu9s_D_BFu1i");
    static STRUCT_IF_C BFu9s_D_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu9s_D_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu1i, BFu9s_D_BFu1i)
//============================================================================


struct  BFu9s_D_BFu1ll  {
  unsigned short v1:9;
  double v2;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_D_BFu1ll) C1{ Fs:9 FL FL:1}



static void Test_BFu9s_D_BFu1ll()
{
  {
    init_simple_test("BFu9s_D_BFu1ll");
    static STRUCT_IF_C BFu9s_D_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu9s_D_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu1ll, BFu9s_D_BFu1ll)
//============================================================================


struct  BFu9s_D_BFu1s  {
  unsigned short v1:9;
  double v2;
  unsigned short v3:1;
};
//SIG(1 BFu9s_D_BFu1s) C1{ Fs:9 FL Fs:1}



static void Test_BFu9s_D_BFu1s()
{
  {
    init_simple_test("BFu9s_D_BFu1s");
    static STRUCT_IF_C BFu9s_D_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu9s_D_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu1s, BFu9s_D_BFu1s)
//============================================================================


struct  BFu9s_D_BFu31i  {
  unsigned short v1:9;
  double v2;
  unsigned int v3:31;
};
//SIG(1 BFu9s_D_BFu31i) C1{ Fs:9 FL Fi:31}



static void Test_BFu9s_D_BFu31i()
{
  {
    init_simple_test("BFu9s_D_BFu31i");
    static STRUCT_IF_C BFu9s_D_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu9s_D_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu9s_D_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu31i, BFu9s_D_BFu31i)
//============================================================================


struct  BFu9s_D_BFu31ll  {
  unsigned short v1:9;
  double v2;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_D_BFu31ll) C1{ Fs:9 FL FL:31}



static void Test_BFu9s_D_BFu31ll()
{
  {
    init_simple_test("BFu9s_D_BFu31ll");
    static STRUCT_IF_C BFu9s_D_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu9s_D_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu9s_D_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu31ll, BFu9s_D_BFu31ll)
//============================================================================


struct  BFu9s_D_BFu32i  {
  unsigned short v1:9;
  double v2;
  unsigned int v3:32;
};
//SIG(1 BFu9s_D_BFu32i) C1{ Fs:9 FL Fi:32}



static void Test_BFu9s_D_BFu32i()
{
  {
    init_simple_test("BFu9s_D_BFu32i");
    static STRUCT_IF_C BFu9s_D_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu9s_D_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu9s_D_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu32i, BFu9s_D_BFu32i)
//============================================================================


struct  BFu9s_D_BFu32ll  {
  unsigned short v1:9;
  double v2;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_D_BFu32ll) C1{ Fs:9 FL FL:32}



static void Test_BFu9s_D_BFu32ll()
{
  {
    init_simple_test("BFu9s_D_BFu32ll");
    static STRUCT_IF_C BFu9s_D_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu9s_D_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu9s_D_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu32ll, BFu9s_D_BFu32ll)
//============================================================================


struct  BFu9s_D_BFu33  {
  unsigned short v1:9;
  double v2;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_D_BFu33) C1{ Fs:9 FL FL:33}



static void Test_BFu9s_D_BFu33()
{
  {
    init_simple_test("BFu9s_D_BFu33");
    static STRUCT_IF_C BFu9s_D_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu9s_D_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu9s_D_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu9s_D_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu33, BFu9s_D_BFu33)
//============================================================================


struct  BFu9s_D_BFu7c  {
  unsigned short v1:9;
  double v2;
  unsigned char v3:7;
};
//SIG(1 BFu9s_D_BFu7c) C1{ Fs:9 FL Fc:7}



static void Test_BFu9s_D_BFu7c()
{
  {
    init_simple_test("BFu9s_D_BFu7c");
    static STRUCT_IF_C BFu9s_D_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu9s_D_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu9s_D_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu7c, BFu9s_D_BFu7c)
//============================================================================


struct  BFu9s_D_BFu7i  {
  unsigned short v1:9;
  double v2;
  unsigned int v3:7;
};
//SIG(1 BFu9s_D_BFu7i) C1{ Fs:9 FL Fi:7}



static void Test_BFu9s_D_BFu7i()
{
  {
    init_simple_test("BFu9s_D_BFu7i");
    static STRUCT_IF_C BFu9s_D_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu9s_D_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu9s_D_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu7i, BFu9s_D_BFu7i)
//============================================================================


struct  BFu9s_D_BFu7ll  {
  unsigned short v1:9;
  double v2;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_D_BFu7ll) C1{ Fs:9 FL FL:7}



static void Test_BFu9s_D_BFu7ll()
{
  {
    init_simple_test("BFu9s_D_BFu7ll");
    static STRUCT_IF_C BFu9s_D_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu9s_D_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu9s_D_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu7ll, BFu9s_D_BFu7ll)
//============================================================================


struct  BFu9s_D_BFu7s  {
  unsigned short v1:9;
  double v2;
  unsigned short v3:7;
};
//SIG(1 BFu9s_D_BFu7s) C1{ Fs:9 FL Fs:7}



static void Test_BFu9s_D_BFu7s()
{
  {
    init_simple_test("BFu9s_D_BFu7s");
    static STRUCT_IF_C BFu9s_D_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu9s_D_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu9s_D_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu7s, BFu9s_D_BFu7s)
//============================================================================


struct  BFu9s_D_BFu8c  {
  unsigned short v1:9;
  double v2;
  unsigned char v3:8;
};
//SIG(1 BFu9s_D_BFu8c) C1{ Fs:9 FL Fc:8}



static void Test_BFu9s_D_BFu8c()
{
  {
    init_simple_test("BFu9s_D_BFu8c");
    static STRUCT_IF_C BFu9s_D_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu9s_D_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu9s_D_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu8c, BFu9s_D_BFu8c)
//============================================================================


struct  BFu9s_D_BFu8i  {
  unsigned short v1:9;
  double v2;
  unsigned int v3:8;
};
//SIG(1 BFu9s_D_BFu8i) C1{ Fs:9 FL Fi:8}



static void Test_BFu9s_D_BFu8i()
{
  {
    init_simple_test("BFu9s_D_BFu8i");
    static STRUCT_IF_C BFu9s_D_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu9s_D_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu9s_D_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu8i, BFu9s_D_BFu8i)
//============================================================================


struct  BFu9s_D_BFu8ll  {
  unsigned short v1:9;
  double v2;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_D_BFu8ll) C1{ Fs:9 FL FL:8}



static void Test_BFu9s_D_BFu8ll()
{
  {
    init_simple_test("BFu9s_D_BFu8ll");
    static STRUCT_IF_C BFu9s_D_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu9s_D_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu9s_D_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu8ll, BFu9s_D_BFu8ll)
//============================================================================


struct  BFu9s_D_BFu8s  {
  unsigned short v1:9;
  double v2;
  unsigned short v3:8;
};
//SIG(1 BFu9s_D_BFu8s) C1{ Fs:9 FL Fs:8}



static void Test_BFu9s_D_BFu8s()
{
  {
    init_simple_test("BFu9s_D_BFu8s");
    static STRUCT_IF_C BFu9s_D_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu9s_D_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu9s_D_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu8s, BFu9s_D_BFu8s)
//============================================================================


struct  BFu9s_D_BFu9i  {
  unsigned short v1:9;
  double v2;
  unsigned int v3:9;
};
//SIG(1 BFu9s_D_BFu9i) C1{ Fs:9 FL Fi:9}



static void Test_BFu9s_D_BFu9i()
{
  {
    init_simple_test("BFu9s_D_BFu9i");
    static STRUCT_IF_C BFu9s_D_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu9s_D_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu9i, BFu9s_D_BFu9i)
//============================================================================


struct  BFu9s_D_BFu9ll  {
  unsigned short v1:9;
  double v2;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_D_BFu9ll) C1{ Fs:9 FL FL:9}



static void Test_BFu9s_D_BFu9ll()
{
  {
    init_simple_test("BFu9s_D_BFu9ll");
    static STRUCT_IF_C BFu9s_D_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu9s_D_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu9ll, BFu9s_D_BFu9ll)
//============================================================================


struct  BFu9s_D_BFu9s  {
  unsigned short v1:9;
  double v2;
  unsigned short v3:9;
};
//SIG(1 BFu9s_D_BFu9s) C1{ Fs:9 FL Fs:9}



static void Test_BFu9s_D_BFu9s()
{
  {
    init_simple_test("BFu9s_D_BFu9s");
    static STRUCT_IF_C BFu9s_D_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu9s_D_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu9s, BFu9s_D_BFu9s)
//============================================================================


struct  BFu9s_D_C  {
  unsigned short v1:9;
  double v2;
  char v3;
};
//SIG(1 BFu9s_D_C) C1{ Fs:9 FL Fc}



static void Test_BFu9s_D_C()
{
  {
    init_simple_test("BFu9s_D_C");
    static STRUCT_IF_C BFu9s_D_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_D_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_C, BFu9s_D_C)
//============================================================================


struct  BFu9s_D_D  {
  unsigned short v1:9;
  double v2;
  double v3;
};
//SIG(1 BFu9s_D_D) C1{ Fs:9 FL[2]}



static void Test_BFu9s_D_D()
{
  {
    init_simple_test("BFu9s_D_D");
    static STRUCT_IF_C BFu9s_D_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu9s_D_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_D_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_D, BFu9s_D_D)
//============================================================================


struct  BFu9s_D_F  {
  unsigned short v1:9;
  double v2;
  float v3;
};
//SIG(1 BFu9s_D_F) C1{ Fs:9 FL Fi}



static void Test_BFu9s_D_F()
{
  {
    init_simple_test("BFu9s_D_F");
    static STRUCT_IF_C BFu9s_D_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_D_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_F, BFu9s_D_F)
//============================================================================


struct  BFu9s_D_I  {
  unsigned short v1:9;
  double v2;
  int v3;
};
//SIG(1 BFu9s_D_I) C1{ Fs:9 FL Fi}



static void Test_BFu9s_D_I()
{
  {
    init_simple_test("BFu9s_D_I");
    static STRUCT_IF_C BFu9s_D_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_D_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_I, BFu9s_D_I)
//============================================================================


struct  BFu9s_D_Ip  {
  unsigned short v1:9;
  double v2;
  int *v3;
};
//SIG(1 BFu9s_D_Ip) C1{ Fs:9 FL Fp}



static void Test_BFu9s_D_Ip()
{
  {
    init_simple_test("BFu9s_D_Ip");
    static STRUCT_IF_C BFu9s_D_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_D_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_Ip, BFu9s_D_Ip)
//============================================================================


struct  BFu9s_D_L  {
  unsigned short v1:9;
  double v2;
  __tsi64 v3;
};
//SIG(1 BFu9s_D_L) C1{ Fs:9 FL[2]}



static void Test_BFu9s_D_L()
{
  {
    init_simple_test("BFu9s_D_L");
    static STRUCT_IF_C BFu9s_D_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu9s_D_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_D_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_L, BFu9s_D_L)
//============================================================================


struct  BFu9s_D_S  {
  unsigned short v1:9;
  double v2;
  short v3;
};
//SIG(1 BFu9s_D_S) C1{ Fs:9 FL Fs}



static void Test_BFu9s_D_S()
{
  {
    init_simple_test("BFu9s_D_S");
    static STRUCT_IF_C BFu9s_D_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_D_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_S, BFu9s_D_S)
//============================================================================


struct  BFu9s_D_Uc  {
  unsigned short v1:9;
  double v2;
  unsigned char v3;
};
//SIG(1 BFu9s_D_Uc) C1{ Fs:9 FL Fc}



static void Test_BFu9s_D_Uc()
{
  {
    init_simple_test("BFu9s_D_Uc");
    static STRUCT_IF_C BFu9s_D_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_D_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_Uc, BFu9s_D_Uc)
//============================================================================


struct  BFu9s_D_Ui  {
  unsigned short v1:9;
  double v2;
  unsigned int v3;
};
//SIG(1 BFu9s_D_Ui) C1{ Fs:9 FL Fi}



static void Test_BFu9s_D_Ui()
{
  {
    init_simple_test("BFu9s_D_Ui");
    static STRUCT_IF_C BFu9s_D_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_D_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_Ui, BFu9s_D_Ui)
//============================================================================


struct  BFu9s_D_Ul  {
  unsigned short v1:9;
  double v2;
  __tsu64 v3;
};
//SIG(1 BFu9s_D_Ul) C1{ Fs:9 FL[2]}



static void Test_BFu9s_D_Ul()
{
  {
    init_simple_test("BFu9s_D_Ul");
    static STRUCT_IF_C BFu9s_D_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu9s_D_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_D_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_Ul, BFu9s_D_Ul)
//============================================================================


struct  BFu9s_D_Us  {
  unsigned short v1:9;
  double v2;
  unsigned short v3;
};
//SIG(1 BFu9s_D_Us) C1{ Fs:9 FL Fs}



static void Test_BFu9s_D_Us()
{
  {
    init_simple_test("BFu9s_D_Us");
    static STRUCT_IF_C BFu9s_D_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_D_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_Us, BFu9s_D_Us)
//============================================================================


struct  BFu9s_D_Vp  {
  unsigned short v1:9;
  double v2;
  void *v3;
};
//SIG(1 BFu9s_D_Vp) C1{ Fs:9 FL Fp}



static void Test_BFu9s_D_Vp()
{
  {
    init_simple_test("BFu9s_D_Vp");
    static STRUCT_IF_C BFu9s_D_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_D_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_D_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_Vp, BFu9s_D_Vp)
//============================================================================


struct  BFu9s_F  {
  unsigned short v1:9;
  float v2;
};
//SIG(1 BFu9s_F) C1{ Fs:9 Fi}



static void Test_BFu9s_F()
{
  {
    init_simple_test("BFu9s_F");
    static STRUCT_IF_C BFu9s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F");
    check_field_offset(lv, v2, 4, "BFu9s_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F, BFu9s_F)
//============================================================================


struct  BFu9s_F_BFu15i  {
  unsigned short v1:9;
  float v2;
  unsigned int v3:15;
};
//SIG(1 BFu9s_F_BFu15i) C1{ Fs:9 Fi Fi:15}



static void Test_BFu9s_F_BFu15i()
{
  {
    init_simple_test("BFu9s_F_BFu15i");
    static STRUCT_IF_C BFu9s_F_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_F_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu15i");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu9s_F_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu9s_F_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu15i, BFu9s_F_BFu15i)
//============================================================================


struct  BFu9s_F_BFu15ll  {
  unsigned short v1:9;
  float v2;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_F_BFu15ll) C1{ Fs:9 Fi FL:15}



static void Test_BFu9s_F_BFu15ll()
{
  {
    init_simple_test("BFu9s_F_BFu15ll");
    static STRUCT_IF_C BFu9s_F_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_F_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_F_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu9s_F_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu9s_F_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu15ll, BFu9s_F_BFu15ll)
//============================================================================


struct  BFu9s_F_BFu15s  {
  unsigned short v1:9;
  float v2;
  unsigned short v3:15;
};
//SIG(1 BFu9s_F_BFu15s) C1{ Fs:9 Fi Fs:15}



static void Test_BFu9s_F_BFu15s()
{
  {
    init_simple_test("BFu9s_F_BFu15s");
    static STRUCT_IF_C BFu9s_F_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_F_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu15s");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu9s_F_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu9s_F_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu15s, BFu9s_F_BFu15s)
//============================================================================


struct  BFu9s_F_BFu16i  {
  unsigned short v1:9;
  float v2;
  unsigned int v3:16;
};
//SIG(1 BFu9s_F_BFu16i) C1{ Fs:9 Fi Fi:16}



static void Test_BFu9s_F_BFu16i()
{
  {
    init_simple_test("BFu9s_F_BFu16i");
    static STRUCT_IF_C BFu9s_F_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_F_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu16i");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu9s_F_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu9s_F_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu16i, BFu9s_F_BFu16i)
//============================================================================


struct  BFu9s_F_BFu16ll  {
  unsigned short v1:9;
  float v2;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_F_BFu16ll) C1{ Fs:9 Fi FL:16}



static void Test_BFu9s_F_BFu16ll()
{
  {
    init_simple_test("BFu9s_F_BFu16ll");
    static STRUCT_IF_C BFu9s_F_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_F_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_F_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu9s_F_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu9s_F_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu16ll, BFu9s_F_BFu16ll)
//============================================================================


struct  BFu9s_F_BFu16s  {
  unsigned short v1:9;
  float v2;
  unsigned short v3:16;
};
//SIG(1 BFu9s_F_BFu16s) C1{ Fs:9 Fi Fs:16}



static void Test_BFu9s_F_BFu16s()
{
  {
    init_simple_test("BFu9s_F_BFu16s");
    static STRUCT_IF_C BFu9s_F_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_F_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu16s");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu9s_F_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu9s_F_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu16s, BFu9s_F_BFu16s)
//============================================================================


struct  BFu9s_F_BFu17i  {
  unsigned short v1:9;
  float v2;
  unsigned int v3:17;
};
//SIG(1 BFu9s_F_BFu17i) C1{ Fs:9 Fi Fi:17}



static void Test_BFu9s_F_BFu17i()
{
  {
    init_simple_test("BFu9s_F_BFu17i");
    static STRUCT_IF_C BFu9s_F_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_F_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu17i");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu9s_F_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu9s_F_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu17i, BFu9s_F_BFu17i)
//============================================================================


struct  BFu9s_F_BFu17ll  {
  unsigned short v1:9;
  float v2;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_F_BFu17ll) C1{ Fs:9 Fi FL:17}



static void Test_BFu9s_F_BFu17ll()
{
  {
    init_simple_test("BFu9s_F_BFu17ll");
    static STRUCT_IF_C BFu9s_F_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_F_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_F_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu9s_F_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu9s_F_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu17ll, BFu9s_F_BFu17ll)
//============================================================================


struct  BFu9s_F_BFu1c  {
  unsigned short v1:9;
  float v2;
  unsigned char v3:1;
};
//SIG(1 BFu9s_F_BFu1c) C1{ Fs:9 Fi Fc:1}



static void Test_BFu9s_F_BFu1c()
{
  {
    init_simple_test("BFu9s_F_BFu1c");
    static STRUCT_IF_C BFu9s_F_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_F_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu1c");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu9s_F_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu1c, BFu9s_F_BFu1c)
//============================================================================


struct  BFu9s_F_BFu1i  {
  unsigned short v1:9;
  float v2;
  unsigned int v3:1;
};
//SIG(1 BFu9s_F_BFu1i) C1{ Fs:9 Fi Fi:1}



static void Test_BFu9s_F_BFu1i()
{
  {
    init_simple_test("BFu9s_F_BFu1i");
    static STRUCT_IF_C BFu9s_F_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_F_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu1i");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu9s_F_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu1i, BFu9s_F_BFu1i)
//============================================================================


struct  BFu9s_F_BFu1ll  {
  unsigned short v1:9;
  float v2;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_F_BFu1ll) C1{ Fs:9 Fi FL:1}



static void Test_BFu9s_F_BFu1ll()
{
  {
    init_simple_test("BFu9s_F_BFu1ll");
    static STRUCT_IF_C BFu9s_F_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_F_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_F_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu9s_F_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu1ll, BFu9s_F_BFu1ll)
//============================================================================


struct  BFu9s_F_BFu1s  {
  unsigned short v1:9;
  float v2;
  unsigned short v3:1;
};
//SIG(1 BFu9s_F_BFu1s) C1{ Fs:9 Fi Fs:1}



static void Test_BFu9s_F_BFu1s()
{
  {
    init_simple_test("BFu9s_F_BFu1s");
    static STRUCT_IF_C BFu9s_F_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_F_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu1s");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu9s_F_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu1s, BFu9s_F_BFu1s)
//============================================================================


struct  BFu9s_F_BFu31i  {
  unsigned short v1:9;
  float v2;
  unsigned int v3:31;
};
//SIG(1 BFu9s_F_BFu31i) C1{ Fs:9 Fi Fi:31}



static void Test_BFu9s_F_BFu31i()
{
  {
    init_simple_test("BFu9s_F_BFu31i");
    static STRUCT_IF_C BFu9s_F_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_F_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu31i");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu9s_F_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu9s_F_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu31i, BFu9s_F_BFu31i)
//============================================================================


struct  BFu9s_F_BFu31ll  {
  unsigned short v1:9;
  float v2;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_F_BFu31ll) C1{ Fs:9 Fi FL:31}



static void Test_BFu9s_F_BFu31ll()
{
  {
    init_simple_test("BFu9s_F_BFu31ll");
    static STRUCT_IF_C BFu9s_F_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_F_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_F_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu9s_F_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu9s_F_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu31ll, BFu9s_F_BFu31ll)
//============================================================================


struct  BFu9s_F_BFu32i  {
  unsigned short v1:9;
  float v2;
  unsigned int v3:32;
};
//SIG(1 BFu9s_F_BFu32i) C1{ Fs:9 Fi Fi:32}



static void Test_BFu9s_F_BFu32i()
{
  {
    init_simple_test("BFu9s_F_BFu32i");
    static STRUCT_IF_C BFu9s_F_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_F_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu32i");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu9s_F_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu9s_F_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu32i, BFu9s_F_BFu32i)
//============================================================================


struct  BFu9s_F_BFu32ll  {
  unsigned short v1:9;
  float v2;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_F_BFu32ll) C1{ Fs:9 Fi FL:32}



static void Test_BFu9s_F_BFu32ll()
{
  {
    init_simple_test("BFu9s_F_BFu32ll");
    static STRUCT_IF_C BFu9s_F_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_F_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_F_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu9s_F_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu9s_F_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu32ll, BFu9s_F_BFu32ll)
//============================================================================


struct  BFu9s_F_BFu33  {
  unsigned short v1:9;
  float v2;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_F_BFu33) C1{ Fs:9 Fi FL:33}



static void Test_BFu9s_F_BFu33()
{
  {
    init_simple_test("BFu9s_F_BFu33");
    static STRUCT_IF_C BFu9s_F_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu9s_F_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_F_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu33");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu9s_F_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu9s_F_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu33, BFu9s_F_BFu33)
//============================================================================


struct  BFu9s_F_BFu7c  {
  unsigned short v1:9;
  float v2;
  unsigned char v3:7;
};
//SIG(1 BFu9s_F_BFu7c) C1{ Fs:9 Fi Fc:7}



static void Test_BFu9s_F_BFu7c()
{
  {
    init_simple_test("BFu9s_F_BFu7c");
    static STRUCT_IF_C BFu9s_F_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_F_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu7c");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu9s_F_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu9s_F_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu7c, BFu9s_F_BFu7c)
//============================================================================


struct  BFu9s_F_BFu7i  {
  unsigned short v1:9;
  float v2;
  unsigned int v3:7;
};
//SIG(1 BFu9s_F_BFu7i) C1{ Fs:9 Fi Fi:7}



static void Test_BFu9s_F_BFu7i()
{
  {
    init_simple_test("BFu9s_F_BFu7i");
    static STRUCT_IF_C BFu9s_F_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_F_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu7i");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu9s_F_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu9s_F_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu7i, BFu9s_F_BFu7i)
//============================================================================


struct  BFu9s_F_BFu7ll  {
  unsigned short v1:9;
  float v2;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_F_BFu7ll) C1{ Fs:9 Fi FL:7}



static void Test_BFu9s_F_BFu7ll()
{
  {
    init_simple_test("BFu9s_F_BFu7ll");
    static STRUCT_IF_C BFu9s_F_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_F_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_F_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu9s_F_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu9s_F_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu7ll, BFu9s_F_BFu7ll)
//============================================================================


struct  BFu9s_F_BFu7s  {
  unsigned short v1:9;
  float v2;
  unsigned short v3:7;
};
//SIG(1 BFu9s_F_BFu7s) C1{ Fs:9 Fi Fs:7}



static void Test_BFu9s_F_BFu7s()
{
  {
    init_simple_test("BFu9s_F_BFu7s");
    static STRUCT_IF_C BFu9s_F_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_F_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu7s");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu9s_F_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu9s_F_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu7s, BFu9s_F_BFu7s)
//============================================================================


struct  BFu9s_F_BFu8c  {
  unsigned short v1:9;
  float v2;
  unsigned char v3:8;
};
//SIG(1 BFu9s_F_BFu8c) C1{ Fs:9 Fi Fc:8}



static void Test_BFu9s_F_BFu8c()
{
  {
    init_simple_test("BFu9s_F_BFu8c");
    static STRUCT_IF_C BFu9s_F_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_F_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu8c");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu9s_F_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu9s_F_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu8c, BFu9s_F_BFu8c)
//============================================================================


struct  BFu9s_F_BFu8i  {
  unsigned short v1:9;
  float v2;
  unsigned int v3:8;
};
//SIG(1 BFu9s_F_BFu8i) C1{ Fs:9 Fi Fi:8}



static void Test_BFu9s_F_BFu8i()
{
  {
    init_simple_test("BFu9s_F_BFu8i");
    static STRUCT_IF_C BFu9s_F_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_F_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu8i");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu9s_F_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu9s_F_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu8i, BFu9s_F_BFu8i)
//============================================================================


struct  BFu9s_F_BFu8ll  {
  unsigned short v1:9;
  float v2;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_F_BFu8ll) C1{ Fs:9 Fi FL:8}



static void Test_BFu9s_F_BFu8ll()
{
  {
    init_simple_test("BFu9s_F_BFu8ll");
    static STRUCT_IF_C BFu9s_F_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_F_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_F_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu9s_F_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu9s_F_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu8ll, BFu9s_F_BFu8ll)
//============================================================================


struct  BFu9s_F_BFu8s  {
  unsigned short v1:9;
  float v2;
  unsigned short v3:8;
};
//SIG(1 BFu9s_F_BFu8s) C1{ Fs:9 Fi Fs:8}



static void Test_BFu9s_F_BFu8s()
{
  {
    init_simple_test("BFu9s_F_BFu8s");
    static STRUCT_IF_C BFu9s_F_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_F_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu8s");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu9s_F_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu9s_F_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu8s, BFu9s_F_BFu8s)
//============================================================================


struct  BFu9s_F_BFu9i  {
  unsigned short v1:9;
  float v2;
  unsigned int v3:9;
};
//SIG(1 BFu9s_F_BFu9i) C1{ Fs:9 Fi Fi:9}



static void Test_BFu9s_F_BFu9i()
{
  {
    init_simple_test("BFu9s_F_BFu9i");
    static STRUCT_IF_C BFu9s_F_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_F_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu9i");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu9s_F_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu9i, BFu9s_F_BFu9i)
//============================================================================


struct  BFu9s_F_BFu9ll  {
  unsigned short v1:9;
  float v2;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_F_BFu9ll) C1{ Fs:9 Fi FL:9}



static void Test_BFu9s_F_BFu9ll()
{
  {
    init_simple_test("BFu9s_F_BFu9ll");
    static STRUCT_IF_C BFu9s_F_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_F_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_F_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu9s_F_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu9ll, BFu9s_F_BFu9ll)
//============================================================================


struct  BFu9s_F_BFu9s  {
  unsigned short v1:9;
  float v2;
  unsigned short v3:9;
};
//SIG(1 BFu9s_F_BFu9s) C1{ Fs:9 Fi Fs:9}



static void Test_BFu9s_F_BFu9s()
{
  {
    init_simple_test("BFu9s_F_BFu9s");
    static STRUCT_IF_C BFu9s_F_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_F_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu9s");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu9s_F_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu9s, BFu9s_F_BFu9s)
//============================================================================


struct  BFu9s_F_C  {
  unsigned short v1:9;
  float v2;
  char v3;
};
//SIG(1 BFu9s_F_C) C1{ Fs:9 Fi Fc}



static void Test_BFu9s_F_C()
{
  {
    init_simple_test("BFu9s_F_C");
    static STRUCT_IF_C BFu9s_F_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_F_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_C");
    check_field_offset(lv, v2, 4, "BFu9s_F_C.v2");
    check_field_offset(lv, v3, 8, "BFu9s_F_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_C, BFu9s_F_C)
//============================================================================


struct  BFu9s_F_D  {
  unsigned short v1:9;
  float v2;
  double v3;
};
//SIG(1 BFu9s_F_D) C1{ Fs:9 Fi FL}



static void Test_BFu9s_F_D()
{
  {
    init_simple_test("BFu9s_F_D");
    static STRUCT_IF_C BFu9s_F_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu9s_F_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_F_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_D");
    check_field_offset(lv, v2, 4, "BFu9s_F_D.v2");
    check_field_offset(lv, v3, 8, "BFu9s_F_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_D, BFu9s_F_D)
//============================================================================


struct  BFu9s_F_F  {
  unsigned short v1:9;
  float v2;
  float v3;
};
//SIG(1 BFu9s_F_F) C1{ Fs:9 Fi[2]}



static void Test_BFu9s_F_F()
{
  {
    init_simple_test("BFu9s_F_F");
    static STRUCT_IF_C BFu9s_F_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_F_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_F");
    check_field_offset(lv, v2, 4, "BFu9s_F_F.v2");
    check_field_offset(lv, v3, 8, "BFu9s_F_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_F, BFu9s_F_F)
//============================================================================


struct  BFu9s_F_I  {
  unsigned short v1:9;
  float v2;
  int v3;
};
//SIG(1 BFu9s_F_I) C1{ Fs:9 Fi[2]}



static void Test_BFu9s_F_I()
{
  {
    init_simple_test("BFu9s_F_I");
    static STRUCT_IF_C BFu9s_F_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_F_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_I");
    check_field_offset(lv, v2, 4, "BFu9s_F_I.v2");
    check_field_offset(lv, v3, 8, "BFu9s_F_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_I, BFu9s_F_I)
//============================================================================


struct  BFu9s_F_Ip  {
  unsigned short v1:9;
  float v2;
  int *v3;
};
//SIG(1 BFu9s_F_Ip) C1{ Fs:9 Fi Fp}



static void Test_BFu9s_F_Ip()
{
  {
    init_simple_test("BFu9s_F_Ip");
    static STRUCT_IF_C BFu9s_F_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_F_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_F_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_Ip");
    check_field_offset(lv, v2, 4, "BFu9s_F_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu9s_F_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_Ip, BFu9s_F_Ip)
//============================================================================


struct  BFu9s_F_L  {
  unsigned short v1:9;
  float v2;
  __tsi64 v3;
};
//SIG(1 BFu9s_F_L) C1{ Fs:9 Fi FL}



static void Test_BFu9s_F_L()
{
  {
    init_simple_test("BFu9s_F_L");
    static STRUCT_IF_C BFu9s_F_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu9s_F_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_F_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_L");
    check_field_offset(lv, v2, 4, "BFu9s_F_L.v2");
    check_field_offset(lv, v3, 8, "BFu9s_F_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_L, BFu9s_F_L)
//============================================================================


struct  BFu9s_F_S  {
  unsigned short v1:9;
  float v2;
  short v3;
};
//SIG(1 BFu9s_F_S) C1{ Fs:9 Fi Fs}



static void Test_BFu9s_F_S()
{
  {
    init_simple_test("BFu9s_F_S");
    static STRUCT_IF_C BFu9s_F_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_F_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_S");
    check_field_offset(lv, v2, 4, "BFu9s_F_S.v2");
    check_field_offset(lv, v3, 8, "BFu9s_F_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_S, BFu9s_F_S)
//============================================================================


struct  BFu9s_F_Uc  {
  unsigned short v1:9;
  float v2;
  unsigned char v3;
};
//SIG(1 BFu9s_F_Uc) C1{ Fs:9 Fi Fc}



static void Test_BFu9s_F_Uc()
{
  {
    init_simple_test("BFu9s_F_Uc");
    static STRUCT_IF_C BFu9s_F_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_F_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_Uc");
    check_field_offset(lv, v2, 4, "BFu9s_F_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu9s_F_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_Uc, BFu9s_F_Uc)
//============================================================================


struct  BFu9s_F_Ui  {
  unsigned short v1:9;
  float v2;
  unsigned int v3;
};
//SIG(1 BFu9s_F_Ui) C1{ Fs:9 Fi[2]}



static void Test_BFu9s_F_Ui()
{
  {
    init_simple_test("BFu9s_F_Ui");
    static STRUCT_IF_C BFu9s_F_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_F_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_Ui");
    check_field_offset(lv, v2, 4, "BFu9s_F_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu9s_F_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_Ui, BFu9s_F_Ui)
//============================================================================


struct  BFu9s_F_Ul  {
  unsigned short v1:9;
  float v2;
  __tsu64 v3;
};
//SIG(1 BFu9s_F_Ul) C1{ Fs:9 Fi FL}



static void Test_BFu9s_F_Ul()
{
  {
    init_simple_test("BFu9s_F_Ul");
    static STRUCT_IF_C BFu9s_F_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu9s_F_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_F_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_Ul");
    check_field_offset(lv, v2, 4, "BFu9s_F_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu9s_F_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_Ul, BFu9s_F_Ul)
//============================================================================


struct  BFu9s_F_Us  {
  unsigned short v1:9;
  float v2;
  unsigned short v3;
};
//SIG(1 BFu9s_F_Us) C1{ Fs:9 Fi Fs}



static void Test_BFu9s_F_Us()
{
  {
    init_simple_test("BFu9s_F_Us");
    static STRUCT_IF_C BFu9s_F_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_F_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_Us");
    check_field_offset(lv, v2, 4, "BFu9s_F_Us.v2");
    check_field_offset(lv, v3, 8, "BFu9s_F_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_Us, BFu9s_F_Us)
//============================================================================


struct  BFu9s_F_Vp  {
  unsigned short v1:9;
  float v2;
  void *v3;
};
//SIG(1 BFu9s_F_Vp) C1{ Fs:9 Fi Fp}



static void Test_BFu9s_F_Vp()
{
  {
    init_simple_test("BFu9s_F_Vp");
    static STRUCT_IF_C BFu9s_F_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_F_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_F_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_Vp");
    check_field_offset(lv, v2, 4, "BFu9s_F_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu9s_F_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_Vp, BFu9s_F_Vp)
//============================================================================


struct  BFu9s_I  {
  unsigned short v1:9;
  int v2;
};
//SIG(1 BFu9s_I) C1{ Fs:9 Fi}



static void Test_BFu9s_I()
{
  {
    init_simple_test("BFu9s_I");
    static STRUCT_IF_C BFu9s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I");
    check_field_offset(lv, v2, 4, "BFu9s_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I, BFu9s_I)
//============================================================================


struct  BFu9s_I_BFu15i  {
  unsigned short v1:9;
  int v2;
  unsigned int v3:15;
};
//SIG(1 BFu9s_I_BFu15i) C1{ Fs:9 Fi Fi:15}



static void Test_BFu9s_I_BFu15i()
{
  {
    init_simple_test("BFu9s_I_BFu15i");
    static STRUCT_IF_C BFu9s_I_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_I_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu15i");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu9s_I_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu9s_I_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu15i, BFu9s_I_BFu15i)
//============================================================================


struct  BFu9s_I_BFu15ll  {
  unsigned short v1:9;
  int v2;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_I_BFu15ll) C1{ Fs:9 Fi FL:15}



static void Test_BFu9s_I_BFu15ll()
{
  {
    init_simple_test("BFu9s_I_BFu15ll");
    static STRUCT_IF_C BFu9s_I_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_I_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_I_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu9s_I_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu9s_I_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu15ll, BFu9s_I_BFu15ll)
//============================================================================


struct  BFu9s_I_BFu15s  {
  unsigned short v1:9;
  int v2;
  unsigned short v3:15;
};
//SIG(1 BFu9s_I_BFu15s) C1{ Fs:9 Fi Fs:15}



static void Test_BFu9s_I_BFu15s()
{
  {
    init_simple_test("BFu9s_I_BFu15s");
    static STRUCT_IF_C BFu9s_I_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_I_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu15s");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu9s_I_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu9s_I_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu15s, BFu9s_I_BFu15s)
//============================================================================


struct  BFu9s_I_BFu16i  {
  unsigned short v1:9;
  int v2;
  unsigned int v3:16;
};
//SIG(1 BFu9s_I_BFu16i) C1{ Fs:9 Fi Fi:16}



static void Test_BFu9s_I_BFu16i()
{
  {
    init_simple_test("BFu9s_I_BFu16i");
    static STRUCT_IF_C BFu9s_I_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_I_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu16i");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu9s_I_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu9s_I_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu16i, BFu9s_I_BFu16i)
//============================================================================


struct  BFu9s_I_BFu16ll  {
  unsigned short v1:9;
  int v2;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_I_BFu16ll) C1{ Fs:9 Fi FL:16}



static void Test_BFu9s_I_BFu16ll()
{
  {
    init_simple_test("BFu9s_I_BFu16ll");
    static STRUCT_IF_C BFu9s_I_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_I_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_I_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu9s_I_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu9s_I_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu16ll, BFu9s_I_BFu16ll)
//============================================================================


struct  BFu9s_I_BFu16s  {
  unsigned short v1:9;
  int v2;
  unsigned short v3:16;
};
//SIG(1 BFu9s_I_BFu16s) C1{ Fs:9 Fi Fs:16}



static void Test_BFu9s_I_BFu16s()
{
  {
    init_simple_test("BFu9s_I_BFu16s");
    static STRUCT_IF_C BFu9s_I_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_I_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu16s");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu9s_I_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu9s_I_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu16s, BFu9s_I_BFu16s)
//============================================================================


struct  BFu9s_I_BFu17i  {
  unsigned short v1:9;
  int v2;
  unsigned int v3:17;
};
//SIG(1 BFu9s_I_BFu17i) C1{ Fs:9 Fi Fi:17}



static void Test_BFu9s_I_BFu17i()
{
  {
    init_simple_test("BFu9s_I_BFu17i");
    static STRUCT_IF_C BFu9s_I_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_I_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu17i");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu9s_I_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu9s_I_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu17i, BFu9s_I_BFu17i)
//============================================================================


struct  BFu9s_I_BFu17ll  {
  unsigned short v1:9;
  int v2;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_I_BFu17ll) C1{ Fs:9 Fi FL:17}



static void Test_BFu9s_I_BFu17ll()
{
  {
    init_simple_test("BFu9s_I_BFu17ll");
    static STRUCT_IF_C BFu9s_I_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_I_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_I_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu9s_I_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu9s_I_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu17ll, BFu9s_I_BFu17ll)
//============================================================================


struct  BFu9s_I_BFu1c  {
  unsigned short v1:9;
  int v2;
  unsigned char v3:1;
};
//SIG(1 BFu9s_I_BFu1c) C1{ Fs:9 Fi Fc:1}



static void Test_BFu9s_I_BFu1c()
{
  {
    init_simple_test("BFu9s_I_BFu1c");
    static STRUCT_IF_C BFu9s_I_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_I_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu1c");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu9s_I_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu1c, BFu9s_I_BFu1c)
//============================================================================


struct  BFu9s_I_BFu1i  {
  unsigned short v1:9;
  int v2;
  unsigned int v3:1;
};
//SIG(1 BFu9s_I_BFu1i) C1{ Fs:9 Fi Fi:1}



static void Test_BFu9s_I_BFu1i()
{
  {
    init_simple_test("BFu9s_I_BFu1i");
    static STRUCT_IF_C BFu9s_I_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_I_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu1i");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu9s_I_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu1i, BFu9s_I_BFu1i)
//============================================================================


struct  BFu9s_I_BFu1ll  {
  unsigned short v1:9;
  int v2;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_I_BFu1ll) C1{ Fs:9 Fi FL:1}



static void Test_BFu9s_I_BFu1ll()
{
  {
    init_simple_test("BFu9s_I_BFu1ll");
    static STRUCT_IF_C BFu9s_I_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_I_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_I_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu9s_I_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu1ll, BFu9s_I_BFu1ll)
//============================================================================


struct  BFu9s_I_BFu1s  {
  unsigned short v1:9;
  int v2;
  unsigned short v3:1;
};
//SIG(1 BFu9s_I_BFu1s) C1{ Fs:9 Fi Fs:1}



static void Test_BFu9s_I_BFu1s()
{
  {
    init_simple_test("BFu9s_I_BFu1s");
    static STRUCT_IF_C BFu9s_I_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_I_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu1s");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu9s_I_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu1s, BFu9s_I_BFu1s)
//============================================================================


struct  BFu9s_I_BFu31i  {
  unsigned short v1:9;
  int v2;
  unsigned int v3:31;
};
//SIG(1 BFu9s_I_BFu31i) C1{ Fs:9 Fi Fi:31}



static void Test_BFu9s_I_BFu31i()
{
  {
    init_simple_test("BFu9s_I_BFu31i");
    static STRUCT_IF_C BFu9s_I_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_I_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu31i");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu9s_I_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu9s_I_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu31i, BFu9s_I_BFu31i)
//============================================================================


struct  BFu9s_I_BFu31ll  {
  unsigned short v1:9;
  int v2;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_I_BFu31ll) C1{ Fs:9 Fi FL:31}



static void Test_BFu9s_I_BFu31ll()
{
  {
    init_simple_test("BFu9s_I_BFu31ll");
    static STRUCT_IF_C BFu9s_I_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_I_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_I_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu9s_I_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu9s_I_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu31ll, BFu9s_I_BFu31ll)
//============================================================================


struct  BFu9s_I_BFu32i  {
  unsigned short v1:9;
  int v2;
  unsigned int v3:32;
};
//SIG(1 BFu9s_I_BFu32i) C1{ Fs:9 Fi Fi:32}



static void Test_BFu9s_I_BFu32i()
{
  {
    init_simple_test("BFu9s_I_BFu32i");
    static STRUCT_IF_C BFu9s_I_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_I_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu32i");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu9s_I_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu9s_I_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu32i, BFu9s_I_BFu32i)
//============================================================================


struct  BFu9s_I_BFu32ll  {
  unsigned short v1:9;
  int v2;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_I_BFu32ll) C1{ Fs:9 Fi FL:32}



static void Test_BFu9s_I_BFu32ll()
{
  {
    init_simple_test("BFu9s_I_BFu32ll");
    static STRUCT_IF_C BFu9s_I_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_I_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_I_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu9s_I_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu9s_I_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu32ll, BFu9s_I_BFu32ll)
//============================================================================


struct  BFu9s_I_BFu33  {
  unsigned short v1:9;
  int v2;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_I_BFu33) C1{ Fs:9 Fi FL:33}



static void Test_BFu9s_I_BFu33()
{
  {
    init_simple_test("BFu9s_I_BFu33");
    static STRUCT_IF_C BFu9s_I_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu9s_I_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_I_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu33");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu9s_I_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu9s_I_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu33, BFu9s_I_BFu33)
//============================================================================


struct  BFu9s_I_BFu7c  {
  unsigned short v1:9;
  int v2;
  unsigned char v3:7;
};
//SIG(1 BFu9s_I_BFu7c) C1{ Fs:9 Fi Fc:7}



static void Test_BFu9s_I_BFu7c()
{
  {
    init_simple_test("BFu9s_I_BFu7c");
    static STRUCT_IF_C BFu9s_I_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_I_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu7c");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu9s_I_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu9s_I_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu7c, BFu9s_I_BFu7c)
//============================================================================


struct  BFu9s_I_BFu7i  {
  unsigned short v1:9;
  int v2;
  unsigned int v3:7;
};
//SIG(1 BFu9s_I_BFu7i) C1{ Fs:9 Fi Fi:7}



static void Test_BFu9s_I_BFu7i()
{
  {
    init_simple_test("BFu9s_I_BFu7i");
    static STRUCT_IF_C BFu9s_I_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_I_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu7i");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu9s_I_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu9s_I_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu7i, BFu9s_I_BFu7i)
//============================================================================


struct  BFu9s_I_BFu7ll  {
  unsigned short v1:9;
  int v2;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_I_BFu7ll) C1{ Fs:9 Fi FL:7}



static void Test_BFu9s_I_BFu7ll()
{
  {
    init_simple_test("BFu9s_I_BFu7ll");
    static STRUCT_IF_C BFu9s_I_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_I_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_I_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu9s_I_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu9s_I_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu7ll, BFu9s_I_BFu7ll)
//============================================================================


struct  BFu9s_I_BFu7s  {
  unsigned short v1:9;
  int v2;
  unsigned short v3:7;
};
//SIG(1 BFu9s_I_BFu7s) C1{ Fs:9 Fi Fs:7}



static void Test_BFu9s_I_BFu7s()
{
  {
    init_simple_test("BFu9s_I_BFu7s");
    static STRUCT_IF_C BFu9s_I_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_I_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu7s");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu9s_I_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu9s_I_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu7s, BFu9s_I_BFu7s)
//============================================================================


struct  BFu9s_I_BFu8c  {
  unsigned short v1:9;
  int v2;
  unsigned char v3:8;
};
//SIG(1 BFu9s_I_BFu8c) C1{ Fs:9 Fi Fc:8}



static void Test_BFu9s_I_BFu8c()
{
  {
    init_simple_test("BFu9s_I_BFu8c");
    static STRUCT_IF_C BFu9s_I_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_I_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu8c");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu9s_I_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu9s_I_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu8c, BFu9s_I_BFu8c)
//============================================================================


struct  BFu9s_I_BFu8i  {
  unsigned short v1:9;
  int v2;
  unsigned int v3:8;
};
//SIG(1 BFu9s_I_BFu8i) C1{ Fs:9 Fi Fi:8}



static void Test_BFu9s_I_BFu8i()
{
  {
    init_simple_test("BFu9s_I_BFu8i");
    static STRUCT_IF_C BFu9s_I_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_I_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu8i");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu9s_I_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu9s_I_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu8i, BFu9s_I_BFu8i)
//============================================================================


struct  BFu9s_I_BFu8ll  {
  unsigned short v1:9;
  int v2;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_I_BFu8ll) C1{ Fs:9 Fi FL:8}



static void Test_BFu9s_I_BFu8ll()
{
  {
    init_simple_test("BFu9s_I_BFu8ll");
    static STRUCT_IF_C BFu9s_I_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_I_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_I_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu9s_I_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu9s_I_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu8ll, BFu9s_I_BFu8ll)
//============================================================================


struct  BFu9s_I_BFu8s  {
  unsigned short v1:9;
  int v2;
  unsigned short v3:8;
};
//SIG(1 BFu9s_I_BFu8s) C1{ Fs:9 Fi Fs:8}



static void Test_BFu9s_I_BFu8s()
{
  {
    init_simple_test("BFu9s_I_BFu8s");
    static STRUCT_IF_C BFu9s_I_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_I_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu8s");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu9s_I_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu9s_I_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu8s, BFu9s_I_BFu8s)
//============================================================================


struct  BFu9s_I_BFu9i  {
  unsigned short v1:9;
  int v2;
  unsigned int v3:9;
};
//SIG(1 BFu9s_I_BFu9i) C1{ Fs:9 Fi Fi:9}



static void Test_BFu9s_I_BFu9i()
{
  {
    init_simple_test("BFu9s_I_BFu9i");
    static STRUCT_IF_C BFu9s_I_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_I_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu9i");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu9s_I_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu9i, BFu9s_I_BFu9i)
//============================================================================


struct  BFu9s_I_BFu9ll  {
  unsigned short v1:9;
  int v2;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_I_BFu9ll) C1{ Fs:9 Fi FL:9}



static void Test_BFu9s_I_BFu9ll()
{
  {
    init_simple_test("BFu9s_I_BFu9ll");
    static STRUCT_IF_C BFu9s_I_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_I_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_I_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu9s_I_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu9ll, BFu9s_I_BFu9ll)
//============================================================================


struct  BFu9s_I_BFu9s  {
  unsigned short v1:9;
  int v2;
  unsigned short v3:9;
};
//SIG(1 BFu9s_I_BFu9s) C1{ Fs:9 Fi Fs:9}



static void Test_BFu9s_I_BFu9s()
{
  {
    init_simple_test("BFu9s_I_BFu9s");
    static STRUCT_IF_C BFu9s_I_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_I_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu9s");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu9s_I_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu9s, BFu9s_I_BFu9s)
//============================================================================


struct  BFu9s_I_C  {
  unsigned short v1:9;
  int v2;
  char v3;
};
//SIG(1 BFu9s_I_C) C1{ Fs:9 Fi Fc}



static void Test_BFu9s_I_C()
{
  {
    init_simple_test("BFu9s_I_C");
    static STRUCT_IF_C BFu9s_I_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_I_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_C");
    check_field_offset(lv, v2, 4, "BFu9s_I_C.v2");
    check_field_offset(lv, v3, 8, "BFu9s_I_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_C, BFu9s_I_C)
//============================================================================


struct  BFu9s_I_D  {
  unsigned short v1:9;
  int v2;
  double v3;
};
//SIG(1 BFu9s_I_D) C1{ Fs:9 Fi FL}



static void Test_BFu9s_I_D()
{
  {
    init_simple_test("BFu9s_I_D");
    static STRUCT_IF_C BFu9s_I_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu9s_I_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_I_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_D");
    check_field_offset(lv, v2, 4, "BFu9s_I_D.v2");
    check_field_offset(lv, v3, 8, "BFu9s_I_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_D, BFu9s_I_D)
//============================================================================


struct  BFu9s_I_F  {
  unsigned short v1:9;
  int v2;
  float v3;
};
//SIG(1 BFu9s_I_F) C1{ Fs:9 Fi[2]}



static void Test_BFu9s_I_F()
{
  {
    init_simple_test("BFu9s_I_F");
    static STRUCT_IF_C BFu9s_I_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_I_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_F");
    check_field_offset(lv, v2, 4, "BFu9s_I_F.v2");
    check_field_offset(lv, v3, 8, "BFu9s_I_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_F, BFu9s_I_F)
//============================================================================


struct  BFu9s_I_I  {
  unsigned short v1:9;
  int v2;
  int v3;
};
//SIG(1 BFu9s_I_I) C1{ Fs:9 Fi[2]}



static void Test_BFu9s_I_I()
{
  {
    init_simple_test("BFu9s_I_I");
    static STRUCT_IF_C BFu9s_I_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_I_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_I");
    check_field_offset(lv, v2, 4, "BFu9s_I_I.v2");
    check_field_offset(lv, v3, 8, "BFu9s_I_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_I, BFu9s_I_I)
//============================================================================


struct  BFu9s_I_Ip  {
  unsigned short v1:9;
  int v2;
  int *v3;
};
//SIG(1 BFu9s_I_Ip) C1{ Fs:9 Fi Fp}



static void Test_BFu9s_I_Ip()
{
  {
    init_simple_test("BFu9s_I_Ip");
    static STRUCT_IF_C BFu9s_I_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_I_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_I_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_Ip");
    check_field_offset(lv, v2, 4, "BFu9s_I_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu9s_I_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_Ip, BFu9s_I_Ip)
//============================================================================


struct  BFu9s_I_L  {
  unsigned short v1:9;
  int v2;
  __tsi64 v3;
};
//SIG(1 BFu9s_I_L) C1{ Fs:9 Fi FL}



static void Test_BFu9s_I_L()
{
  {
    init_simple_test("BFu9s_I_L");
    static STRUCT_IF_C BFu9s_I_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu9s_I_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_I_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_L");
    check_field_offset(lv, v2, 4, "BFu9s_I_L.v2");
    check_field_offset(lv, v3, 8, "BFu9s_I_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_L, BFu9s_I_L)
//============================================================================


struct  BFu9s_I_S  {
  unsigned short v1:9;
  int v2;
  short v3;
};
//SIG(1 BFu9s_I_S) C1{ Fs:9 Fi Fs}



static void Test_BFu9s_I_S()
{
  {
    init_simple_test("BFu9s_I_S");
    static STRUCT_IF_C BFu9s_I_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_I_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_S");
    check_field_offset(lv, v2, 4, "BFu9s_I_S.v2");
    check_field_offset(lv, v3, 8, "BFu9s_I_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_S, BFu9s_I_S)
//============================================================================


struct  BFu9s_I_Uc  {
  unsigned short v1:9;
  int v2;
  unsigned char v3;
};
//SIG(1 BFu9s_I_Uc) C1{ Fs:9 Fi Fc}



static void Test_BFu9s_I_Uc()
{
  {
    init_simple_test("BFu9s_I_Uc");
    static STRUCT_IF_C BFu9s_I_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_I_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_Uc");
    check_field_offset(lv, v2, 4, "BFu9s_I_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu9s_I_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_Uc, BFu9s_I_Uc)
//============================================================================


struct  BFu9s_I_Ui  {
  unsigned short v1:9;
  int v2;
  unsigned int v3;
};
//SIG(1 BFu9s_I_Ui) C1{ Fs:9 Fi[2]}



static void Test_BFu9s_I_Ui()
{
  {
    init_simple_test("BFu9s_I_Ui");
    static STRUCT_IF_C BFu9s_I_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_I_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_Ui");
    check_field_offset(lv, v2, 4, "BFu9s_I_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu9s_I_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_Ui, BFu9s_I_Ui)
//============================================================================


struct  BFu9s_I_Ul  {
  unsigned short v1:9;
  int v2;
  __tsu64 v3;
};
//SIG(1 BFu9s_I_Ul) C1{ Fs:9 Fi FL}



static void Test_BFu9s_I_Ul()
{
  {
    init_simple_test("BFu9s_I_Ul");
    static STRUCT_IF_C BFu9s_I_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu9s_I_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_I_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_Ul");
    check_field_offset(lv, v2, 4, "BFu9s_I_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu9s_I_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_Ul, BFu9s_I_Ul)
//============================================================================


struct  BFu9s_I_Us  {
  unsigned short v1:9;
  int v2;
  unsigned short v3;
};
//SIG(1 BFu9s_I_Us) C1{ Fs:9 Fi Fs}



static void Test_BFu9s_I_Us()
{
  {
    init_simple_test("BFu9s_I_Us");
    static STRUCT_IF_C BFu9s_I_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_I_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_Us");
    check_field_offset(lv, v2, 4, "BFu9s_I_Us.v2");
    check_field_offset(lv, v3, 8, "BFu9s_I_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_Us, BFu9s_I_Us)
//============================================================================


struct  BFu9s_I_Vp  {
  unsigned short v1:9;
  int v2;
  void *v3;
};
//SIG(1 BFu9s_I_Vp) C1{ Fs:9 Fi Fp}



static void Test_BFu9s_I_Vp()
{
  {
    init_simple_test("BFu9s_I_Vp");
    static STRUCT_IF_C BFu9s_I_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_I_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_I_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_Vp");
    check_field_offset(lv, v2, 4, "BFu9s_I_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu9s_I_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_Vp, BFu9s_I_Vp)
//============================================================================


struct  BFu9s_Ip  {
  unsigned short v1:9;
  int *v2;
};
//SIG(1 BFu9s_Ip) C1{ Fs:9 Fp}



static void Test_BFu9s_Ip()
{
  {
    init_simple_test("BFu9s_Ip");
    static STRUCT_IF_C BFu9s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip, BFu9s_Ip)
//============================================================================


struct  BFu9s_Ip_BFu15i  {
  unsigned short v1:9;
  int *v2;
  unsigned int v3:15;
};
//SIG(1 BFu9s_Ip_BFu15i) C1{ Fs:9 Fp Fi:15}



static void Test_BFu9s_Ip_BFu15i()
{
  {
    init_simple_test("BFu9s_Ip_BFu15i");
    static STRUCT_IF_C BFu9s_Ip_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu9s_Ip_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu9s_Ip_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu15i, BFu9s_Ip_BFu15i)
//============================================================================


struct  BFu9s_Ip_BFu15ll  {
  unsigned short v1:9;
  int *v2;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_Ip_BFu15ll) C1{ Fs:9 Fp FL:15}



static void Test_BFu9s_Ip_BFu15ll()
{
  {
    init_simple_test("BFu9s_Ip_BFu15ll");
    static STRUCT_IF_C BFu9s_Ip_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu9s_Ip_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu9s_Ip_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu15ll, BFu9s_Ip_BFu15ll)
//============================================================================


struct  BFu9s_Ip_BFu15s  {
  unsigned short v1:9;
  int *v2;
  unsigned short v3:15;
};
//SIG(1 BFu9s_Ip_BFu15s) C1{ Fs:9 Fp Fs:15}



static void Test_BFu9s_Ip_BFu15s()
{
  {
    init_simple_test("BFu9s_Ip_BFu15s");
    static STRUCT_IF_C BFu9s_Ip_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu9s_Ip_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu9s_Ip_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu15s, BFu9s_Ip_BFu15s)
//============================================================================


struct  BFu9s_Ip_BFu16i  {
  unsigned short v1:9;
  int *v2;
  unsigned int v3:16;
};
//SIG(1 BFu9s_Ip_BFu16i) C1{ Fs:9 Fp Fi:16}



static void Test_BFu9s_Ip_BFu16i()
{
  {
    init_simple_test("BFu9s_Ip_BFu16i");
    static STRUCT_IF_C BFu9s_Ip_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu9s_Ip_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu9s_Ip_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu16i, BFu9s_Ip_BFu16i)
//============================================================================


struct  BFu9s_Ip_BFu16ll  {
  unsigned short v1:9;
  int *v2;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_Ip_BFu16ll) C1{ Fs:9 Fp FL:16}



static void Test_BFu9s_Ip_BFu16ll()
{
  {
    init_simple_test("BFu9s_Ip_BFu16ll");
    static STRUCT_IF_C BFu9s_Ip_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu9s_Ip_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu9s_Ip_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu16ll, BFu9s_Ip_BFu16ll)
//============================================================================


struct  BFu9s_Ip_BFu16s  {
  unsigned short v1:9;
  int *v2;
  unsigned short v3:16;
};
//SIG(1 BFu9s_Ip_BFu16s) C1{ Fs:9 Fp Fs:16}



static void Test_BFu9s_Ip_BFu16s()
{
  {
    init_simple_test("BFu9s_Ip_BFu16s");
    static STRUCT_IF_C BFu9s_Ip_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu9s_Ip_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu9s_Ip_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu16s, BFu9s_Ip_BFu16s)
//============================================================================


struct  BFu9s_Ip_BFu17i  {
  unsigned short v1:9;
  int *v2;
  unsigned int v3:17;
};
//SIG(1 BFu9s_Ip_BFu17i) C1{ Fs:9 Fp Fi:17}



static void Test_BFu9s_Ip_BFu17i()
{
  {
    init_simple_test("BFu9s_Ip_BFu17i");
    static STRUCT_IF_C BFu9s_Ip_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu9s_Ip_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu9s_Ip_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu17i, BFu9s_Ip_BFu17i)
//============================================================================


struct  BFu9s_Ip_BFu17ll  {
  unsigned short v1:9;
  int *v2;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_Ip_BFu17ll) C1{ Fs:9 Fp FL:17}



static void Test_BFu9s_Ip_BFu17ll()
{
  {
    init_simple_test("BFu9s_Ip_BFu17ll");
    static STRUCT_IF_C BFu9s_Ip_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu9s_Ip_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu9s_Ip_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu17ll, BFu9s_Ip_BFu17ll)
//============================================================================


struct  BFu9s_Ip_BFu1c  {
  unsigned short v1:9;
  int *v2;
  unsigned char v3:1;
};
//SIG(1 BFu9s_Ip_BFu1c) C1{ Fs:9 Fp Fc:1}



static void Test_BFu9s_Ip_BFu1c()
{
  {
    init_simple_test("BFu9s_Ip_BFu1c");
    static STRUCT_IF_C BFu9s_Ip_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu9s_Ip_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu1c, BFu9s_Ip_BFu1c)
//============================================================================


struct  BFu9s_Ip_BFu1i  {
  unsigned short v1:9;
  int *v2;
  unsigned int v3:1;
};
//SIG(1 BFu9s_Ip_BFu1i) C1{ Fs:9 Fp Fi:1}



static void Test_BFu9s_Ip_BFu1i()
{
  {
    init_simple_test("BFu9s_Ip_BFu1i");
    static STRUCT_IF_C BFu9s_Ip_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu9s_Ip_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu1i, BFu9s_Ip_BFu1i)
//============================================================================


struct  BFu9s_Ip_BFu1ll  {
  unsigned short v1:9;
  int *v2;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_Ip_BFu1ll) C1{ Fs:9 Fp FL:1}



static void Test_BFu9s_Ip_BFu1ll()
{
  {
    init_simple_test("BFu9s_Ip_BFu1ll");
    static STRUCT_IF_C BFu9s_Ip_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu9s_Ip_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu1ll, BFu9s_Ip_BFu1ll)
//============================================================================


struct  BFu9s_Ip_BFu1s  {
  unsigned short v1:9;
  int *v2;
  unsigned short v3:1;
};
//SIG(1 BFu9s_Ip_BFu1s) C1{ Fs:9 Fp Fs:1}



static void Test_BFu9s_Ip_BFu1s()
{
  {
    init_simple_test("BFu9s_Ip_BFu1s");
    static STRUCT_IF_C BFu9s_Ip_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu9s_Ip_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu1s, BFu9s_Ip_BFu1s)
//============================================================================


struct  BFu9s_Ip_BFu31i  {
  unsigned short v1:9;
  int *v2;
  unsigned int v3:31;
};
//SIG(1 BFu9s_Ip_BFu31i) C1{ Fs:9 Fp Fi:31}



static void Test_BFu9s_Ip_BFu31i()
{
  {
    init_simple_test("BFu9s_Ip_BFu31i");
    static STRUCT_IF_C BFu9s_Ip_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu9s_Ip_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu9s_Ip_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu31i, BFu9s_Ip_BFu31i)
//============================================================================


struct  BFu9s_Ip_BFu31ll  {
  unsigned short v1:9;
  int *v2;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_Ip_BFu31ll) C1{ Fs:9 Fp FL:31}



static void Test_BFu9s_Ip_BFu31ll()
{
  {
    init_simple_test("BFu9s_Ip_BFu31ll");
    static STRUCT_IF_C BFu9s_Ip_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu9s_Ip_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu9s_Ip_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu31ll, BFu9s_Ip_BFu31ll)
//============================================================================


struct  BFu9s_Ip_BFu32i  {
  unsigned short v1:9;
  int *v2;
  unsigned int v3:32;
};
//SIG(1 BFu9s_Ip_BFu32i) C1{ Fs:9 Fp Fi:32}



static void Test_BFu9s_Ip_BFu32i()
{
  {
    init_simple_test("BFu9s_Ip_BFu32i");
    static STRUCT_IF_C BFu9s_Ip_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu9s_Ip_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu9s_Ip_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu32i, BFu9s_Ip_BFu32i)
//============================================================================


struct  BFu9s_Ip_BFu32ll  {
  unsigned short v1:9;
  int *v2;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_Ip_BFu32ll) C1{ Fs:9 Fp FL:32}



static void Test_BFu9s_Ip_BFu32ll()
{
  {
    init_simple_test("BFu9s_Ip_BFu32ll");
    static STRUCT_IF_C BFu9s_Ip_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu9s_Ip_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu9s_Ip_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu32ll, BFu9s_Ip_BFu32ll)
//============================================================================


struct  BFu9s_Ip_BFu33  {
  unsigned short v1:9;
  int *v2;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_Ip_BFu33) C1{ Fs:9 Fp FL:33}



static void Test_BFu9s_Ip_BFu33()
{
  {
    init_simple_test("BFu9s_Ip_BFu33");
    static STRUCT_IF_C BFu9s_Ip_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ip_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "BFu9s_Ip_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "BFu9s_Ip_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu33, BFu9s_Ip_BFu33)
//============================================================================


struct  BFu9s_Ip_BFu7c  {
  unsigned short v1:9;
  int *v2;
  unsigned char v3:7;
};
//SIG(1 BFu9s_Ip_BFu7c) C1{ Fs:9 Fp Fc:7}



static void Test_BFu9s_Ip_BFu7c()
{
  {
    init_simple_test("BFu9s_Ip_BFu7c");
    static STRUCT_IF_C BFu9s_Ip_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu9s_Ip_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu9s_Ip_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu7c, BFu9s_Ip_BFu7c)
//============================================================================


struct  BFu9s_Ip_BFu7i  {
  unsigned short v1:9;
  int *v2;
  unsigned int v3:7;
};
//SIG(1 BFu9s_Ip_BFu7i) C1{ Fs:9 Fp Fi:7}



static void Test_BFu9s_Ip_BFu7i()
{
  {
    init_simple_test("BFu9s_Ip_BFu7i");
    static STRUCT_IF_C BFu9s_Ip_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu9s_Ip_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu9s_Ip_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu7i, BFu9s_Ip_BFu7i)
//============================================================================


struct  BFu9s_Ip_BFu7ll  {
  unsigned short v1:9;
  int *v2;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_Ip_BFu7ll) C1{ Fs:9 Fp FL:7}



static void Test_BFu9s_Ip_BFu7ll()
{
  {
    init_simple_test("BFu9s_Ip_BFu7ll");
    static STRUCT_IF_C BFu9s_Ip_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu9s_Ip_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu9s_Ip_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu7ll, BFu9s_Ip_BFu7ll)
//============================================================================


struct  BFu9s_Ip_BFu7s  {
  unsigned short v1:9;
  int *v2;
  unsigned short v3:7;
};
//SIG(1 BFu9s_Ip_BFu7s) C1{ Fs:9 Fp Fs:7}



static void Test_BFu9s_Ip_BFu7s()
{
  {
    init_simple_test("BFu9s_Ip_BFu7s");
    static STRUCT_IF_C BFu9s_Ip_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu9s_Ip_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu9s_Ip_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu7s, BFu9s_Ip_BFu7s)
//============================================================================


struct  BFu9s_Ip_BFu8c  {
  unsigned short v1:9;
  int *v2;
  unsigned char v3:8;
};
//SIG(1 BFu9s_Ip_BFu8c) C1{ Fs:9 Fp Fc:8}



static void Test_BFu9s_Ip_BFu8c()
{
  {
    init_simple_test("BFu9s_Ip_BFu8c");
    static STRUCT_IF_C BFu9s_Ip_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu9s_Ip_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu9s_Ip_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu8c, BFu9s_Ip_BFu8c)
//============================================================================


struct  BFu9s_Ip_BFu8i  {
  unsigned short v1:9;
  int *v2;
  unsigned int v3:8;
};
//SIG(1 BFu9s_Ip_BFu8i) C1{ Fs:9 Fp Fi:8}



static void Test_BFu9s_Ip_BFu8i()
{
  {
    init_simple_test("BFu9s_Ip_BFu8i");
    static STRUCT_IF_C BFu9s_Ip_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu9s_Ip_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu9s_Ip_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu8i, BFu9s_Ip_BFu8i)
//============================================================================


struct  BFu9s_Ip_BFu8ll  {
  unsigned short v1:9;
  int *v2;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_Ip_BFu8ll) C1{ Fs:9 Fp FL:8}



static void Test_BFu9s_Ip_BFu8ll()
{
  {
    init_simple_test("BFu9s_Ip_BFu8ll");
    static STRUCT_IF_C BFu9s_Ip_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu9s_Ip_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu9s_Ip_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu8ll, BFu9s_Ip_BFu8ll)
//============================================================================


struct  BFu9s_Ip_BFu8s  {
  unsigned short v1:9;
  int *v2;
  unsigned short v3:8;
};
//SIG(1 BFu9s_Ip_BFu8s) C1{ Fs:9 Fp Fs:8}



static void Test_BFu9s_Ip_BFu8s()
{
  {
    init_simple_test("BFu9s_Ip_BFu8s");
    static STRUCT_IF_C BFu9s_Ip_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu9s_Ip_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu9s_Ip_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu8s, BFu9s_Ip_BFu8s)
//============================================================================


struct  BFu9s_Ip_BFu9i  {
  unsigned short v1:9;
  int *v2;
  unsigned int v3:9;
};
//SIG(1 BFu9s_Ip_BFu9i) C1{ Fs:9 Fp Fi:9}



static void Test_BFu9s_Ip_BFu9i()
{
  {
    init_simple_test("BFu9s_Ip_BFu9i");
    static STRUCT_IF_C BFu9s_Ip_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu9s_Ip_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu9i, BFu9s_Ip_BFu9i)
//============================================================================


struct  BFu9s_Ip_BFu9ll  {
  unsigned short v1:9;
  int *v2;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_Ip_BFu9ll) C1{ Fs:9 Fp FL:9}



static void Test_BFu9s_Ip_BFu9ll()
{
  {
    init_simple_test("BFu9s_Ip_BFu9ll");
    static STRUCT_IF_C BFu9s_Ip_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu9s_Ip_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu9ll, BFu9s_Ip_BFu9ll)
//============================================================================


struct  BFu9s_Ip_BFu9s  {
  unsigned short v1:9;
  int *v2;
  unsigned short v3:9;
};
//SIG(1 BFu9s_Ip_BFu9s) C1{ Fs:9 Fp Fs:9}



static void Test_BFu9s_Ip_BFu9s()
{
  {
    init_simple_test("BFu9s_Ip_BFu9s");
    static STRUCT_IF_C BFu9s_Ip_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu9s_Ip_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu9s, BFu9s_Ip_BFu9s)
//============================================================================


struct  BFu9s_Ip_C  {
  unsigned short v1:9;
  int *v2;
  char v3;
};
//SIG(1 BFu9s_Ip_C) C1{ Fs:9 Fp Fc}



static void Test_BFu9s_Ip_C()
{
  {
    init_simple_test("BFu9s_Ip_C");
    static STRUCT_IF_C BFu9s_Ip_C lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu9s_Ip_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_C, BFu9s_Ip_C)
//============================================================================


struct  BFu9s_Ip_D  {
  unsigned short v1:9;
  int *v2;
  double v3;
};
//SIG(1 BFu9s_Ip_D) C1{ Fs:9 Fp FL}



static void Test_BFu9s_Ip_D()
{
  {
    init_simple_test("BFu9s_Ip_D");
    static STRUCT_IF_C BFu9s_Ip_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ip_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu9s_Ip_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_D, BFu9s_Ip_D)
//============================================================================


struct  BFu9s_Ip_F  {
  unsigned short v1:9;
  int *v2;
  float v3;
};
//SIG(1 BFu9s_Ip_F) C1{ Fs:9 Fp Fi}



static void Test_BFu9s_Ip_F()
{
  {
    init_simple_test("BFu9s_Ip_F");
    static STRUCT_IF_C BFu9s_Ip_F lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu9s_Ip_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_F, BFu9s_Ip_F)
//============================================================================


struct  BFu9s_Ip_I  {
  unsigned short v1:9;
  int *v2;
  int v3;
};
//SIG(1 BFu9s_Ip_I) C1{ Fs:9 Fp Fi}



static void Test_BFu9s_Ip_I()
{
  {
    init_simple_test("BFu9s_Ip_I");
    static STRUCT_IF_C BFu9s_Ip_I lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu9s_Ip_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_I, BFu9s_Ip_I)
//============================================================================


struct  BFu9s_Ip_Ip  {
  unsigned short v1:9;
  int *v2;
  int *v3;
};
//SIG(1 BFu9s_Ip_Ip) C1{ Fs:9 Fp[2]}



static void Test_BFu9s_Ip_Ip()
{
  {
    init_simple_test("BFu9s_Ip_Ip");
    static STRUCT_IF_C BFu9s_Ip_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu9s_Ip_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_Ip, BFu9s_Ip_Ip)
//============================================================================


struct  BFu9s_Ip_L  {
  unsigned short v1:9;
  int *v2;
  __tsi64 v3;
};
//SIG(1 BFu9s_Ip_L) C1{ Fs:9 Fp FL}



static void Test_BFu9s_Ip_L()
{
  {
    init_simple_test("BFu9s_Ip_L");
    static STRUCT_IF_C BFu9s_Ip_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ip_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu9s_Ip_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_L, BFu9s_Ip_L)
//============================================================================


struct  BFu9s_Ip_S  {
  unsigned short v1:9;
  int *v2;
  short v3;
};
//SIG(1 BFu9s_Ip_S) C1{ Fs:9 Fp Fs}



static void Test_BFu9s_Ip_S()
{
  {
    init_simple_test("BFu9s_Ip_S");
    static STRUCT_IF_C BFu9s_Ip_S lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu9s_Ip_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_S, BFu9s_Ip_S)
//============================================================================


struct  BFu9s_Ip_Uc  {
  unsigned short v1:9;
  int *v2;
  unsigned char v3;
};
//SIG(1 BFu9s_Ip_Uc) C1{ Fs:9 Fp Fc}



static void Test_BFu9s_Ip_Uc()
{
  {
    init_simple_test("BFu9s_Ip_Uc");
    static STRUCT_IF_C BFu9s_Ip_Uc lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu9s_Ip_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_Uc, BFu9s_Ip_Uc)
//============================================================================


struct  BFu9s_Ip_Ui  {
  unsigned short v1:9;
  int *v2;
  unsigned int v3;
};
//SIG(1 BFu9s_Ip_Ui) C1{ Fs:9 Fp Fi}



static void Test_BFu9s_Ip_Ui()
{
  {
    init_simple_test("BFu9s_Ip_Ui");
    static STRUCT_IF_C BFu9s_Ip_Ui lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu9s_Ip_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_Ui, BFu9s_Ip_Ui)
//============================================================================


struct  BFu9s_Ip_Ul  {
  unsigned short v1:9;
  int *v2;
  __tsu64 v3;
};
//SIG(1 BFu9s_Ip_Ul) C1{ Fs:9 Fp FL}



static void Test_BFu9s_Ip_Ul()
{
  {
    init_simple_test("BFu9s_Ip_Ul");
    static STRUCT_IF_C BFu9s_Ip_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ip_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu9s_Ip_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_Ul, BFu9s_Ip_Ul)
//============================================================================


struct  BFu9s_Ip_Us  {
  unsigned short v1:9;
  int *v2;
  unsigned short v3;
};
//SIG(1 BFu9s_Ip_Us) C1{ Fs:9 Fp Fs}



static void Test_BFu9s_Ip_Us()
{
  {
    init_simple_test("BFu9s_Ip_Us");
    static STRUCT_IF_C BFu9s_Ip_Us lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu9s_Ip_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_Us, BFu9s_Ip_Us)
//============================================================================


struct  BFu9s_Ip_Vp  {
  unsigned short v1:9;
  int *v2;
  void *v3;
};
//SIG(1 BFu9s_Ip_Vp) C1{ Fs:9 Fp[2]}



static void Test_BFu9s_Ip_Vp()
{
  {
    init_simple_test("BFu9s_Ip_Vp");
    static STRUCT_IF_C BFu9s_Ip_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Ip_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu9s_Ip_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_Vp, BFu9s_Ip_Vp)
//============================================================================


struct  BFu9s_L  {
  unsigned short v1:9;
  __tsi64 v2;
};
//SIG(1 BFu9s_L) C1{ Fs:9 FL}



static void Test_BFu9s_L()
{
  {
    init_simple_test("BFu9s_L");
    static STRUCT_IF_C BFu9s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L, BFu9s_L)
//============================================================================


struct  BFu9s_L_BFu15i  {
  unsigned short v1:9;
  __tsi64 v2;
  unsigned int v3:15;
};
//SIG(1 BFu9s_L_BFu15i) C1{ Fs:9 FL Fi:15}



static void Test_BFu9s_L_BFu15i()
{
  {
    init_simple_test("BFu9s_L_BFu15i");
    static STRUCT_IF_C BFu9s_L_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu9s_L_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu9s_L_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu15i, BFu9s_L_BFu15i)
//============================================================================


struct  BFu9s_L_BFu15ll  {
  unsigned short v1:9;
  __tsi64 v2;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_L_BFu15ll) C1{ Fs:9 FL FL:15}



static void Test_BFu9s_L_BFu15ll()
{
  {
    init_simple_test("BFu9s_L_BFu15ll");
    static STRUCT_IF_C BFu9s_L_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu9s_L_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu9s_L_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu15ll, BFu9s_L_BFu15ll)
//============================================================================


struct  BFu9s_L_BFu15s  {
  unsigned short v1:9;
  __tsi64 v2;
  unsigned short v3:15;
};
//SIG(1 BFu9s_L_BFu15s) C1{ Fs:9 FL Fs:15}



static void Test_BFu9s_L_BFu15s()
{
  {
    init_simple_test("BFu9s_L_BFu15s");
    static STRUCT_IF_C BFu9s_L_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu9s_L_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu9s_L_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu15s, BFu9s_L_BFu15s)
//============================================================================


struct  BFu9s_L_BFu16i  {
  unsigned short v1:9;
  __tsi64 v2;
  unsigned int v3:16;
};
//SIG(1 BFu9s_L_BFu16i) C1{ Fs:9 FL Fi:16}



static void Test_BFu9s_L_BFu16i()
{
  {
    init_simple_test("BFu9s_L_BFu16i");
    static STRUCT_IF_C BFu9s_L_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu9s_L_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu9s_L_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu16i, BFu9s_L_BFu16i)
//============================================================================


struct  BFu9s_L_BFu16ll  {
  unsigned short v1:9;
  __tsi64 v2;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_L_BFu16ll) C1{ Fs:9 FL FL:16}



static void Test_BFu9s_L_BFu16ll()
{
  {
    init_simple_test("BFu9s_L_BFu16ll");
    static STRUCT_IF_C BFu9s_L_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu9s_L_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu9s_L_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu16ll, BFu9s_L_BFu16ll)
//============================================================================


struct  BFu9s_L_BFu16s  {
  unsigned short v1:9;
  __tsi64 v2;
  unsigned short v3:16;
};
//SIG(1 BFu9s_L_BFu16s) C1{ Fs:9 FL Fs:16}



static void Test_BFu9s_L_BFu16s()
{
  {
    init_simple_test("BFu9s_L_BFu16s");
    static STRUCT_IF_C BFu9s_L_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu9s_L_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu9s_L_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu16s, BFu9s_L_BFu16s)
//============================================================================


struct  BFu9s_L_BFu17i  {
  unsigned short v1:9;
  __tsi64 v2;
  unsigned int v3:17;
};
//SIG(1 BFu9s_L_BFu17i) C1{ Fs:9 FL Fi:17}



static void Test_BFu9s_L_BFu17i()
{
  {
    init_simple_test("BFu9s_L_BFu17i");
    static STRUCT_IF_C BFu9s_L_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu9s_L_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu9s_L_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu17i, BFu9s_L_BFu17i)
//============================================================================


struct  BFu9s_L_BFu17ll  {
  unsigned short v1:9;
  __tsi64 v2;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_L_BFu17ll) C1{ Fs:9 FL FL:17}



static void Test_BFu9s_L_BFu17ll()
{
  {
    init_simple_test("BFu9s_L_BFu17ll");
    static STRUCT_IF_C BFu9s_L_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu9s_L_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu9s_L_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu17ll, BFu9s_L_BFu17ll)
//============================================================================


struct  BFu9s_L_BFu1c  {
  unsigned short v1:9;
  __tsi64 v2;
  unsigned char v3:1;
};
//SIG(1 BFu9s_L_BFu1c) C1{ Fs:9 FL Fc:1}



static void Test_BFu9s_L_BFu1c()
{
  {
    init_simple_test("BFu9s_L_BFu1c");
    static STRUCT_IF_C BFu9s_L_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu9s_L_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu1c, BFu9s_L_BFu1c)
//============================================================================


struct  BFu9s_L_BFu1i  {
  unsigned short v1:9;
  __tsi64 v2;
  unsigned int v3:1;
};
//SIG(1 BFu9s_L_BFu1i) C1{ Fs:9 FL Fi:1}



static void Test_BFu9s_L_BFu1i()
{
  {
    init_simple_test("BFu9s_L_BFu1i");
    static STRUCT_IF_C BFu9s_L_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu9s_L_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu1i, BFu9s_L_BFu1i)
//============================================================================


struct  BFu9s_L_BFu1ll  {
  unsigned short v1:9;
  __tsi64 v2;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_L_BFu1ll) C1{ Fs:9 FL FL:1}



static void Test_BFu9s_L_BFu1ll()
{
  {
    init_simple_test("BFu9s_L_BFu1ll");
    static STRUCT_IF_C BFu9s_L_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu9s_L_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu1ll, BFu9s_L_BFu1ll)
//============================================================================


struct  BFu9s_L_BFu1s  {
  unsigned short v1:9;
  __tsi64 v2;
  unsigned short v3:1;
};
//SIG(1 BFu9s_L_BFu1s) C1{ Fs:9 FL Fs:1}



static void Test_BFu9s_L_BFu1s()
{
  {
    init_simple_test("BFu9s_L_BFu1s");
    static STRUCT_IF_C BFu9s_L_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu9s_L_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu1s, BFu9s_L_BFu1s)
//============================================================================


struct  BFu9s_L_BFu31i  {
  unsigned short v1:9;
  __tsi64 v2;
  unsigned int v3:31;
};
//SIG(1 BFu9s_L_BFu31i) C1{ Fs:9 FL Fi:31}



static void Test_BFu9s_L_BFu31i()
{
  {
    init_simple_test("BFu9s_L_BFu31i");
    static STRUCT_IF_C BFu9s_L_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu9s_L_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu9s_L_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu31i, BFu9s_L_BFu31i)
//============================================================================


struct  BFu9s_L_BFu31ll  {
  unsigned short v1:9;
  __tsi64 v2;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_L_BFu31ll) C1{ Fs:9 FL FL:31}



static void Test_BFu9s_L_BFu31ll()
{
  {
    init_simple_test("BFu9s_L_BFu31ll");
    static STRUCT_IF_C BFu9s_L_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu9s_L_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu9s_L_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu31ll, BFu9s_L_BFu31ll)
//============================================================================


struct  BFu9s_L_BFu32i  {
  unsigned short v1:9;
  __tsi64 v2;
  unsigned int v3:32;
};
//SIG(1 BFu9s_L_BFu32i) C1{ Fs:9 FL Fi:32}



static void Test_BFu9s_L_BFu32i()
{
  {
    init_simple_test("BFu9s_L_BFu32i");
    static STRUCT_IF_C BFu9s_L_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu9s_L_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu9s_L_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu32i, BFu9s_L_BFu32i)
//============================================================================


struct  BFu9s_L_BFu32ll  {
  unsigned short v1:9;
  __tsi64 v2;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_L_BFu32ll) C1{ Fs:9 FL FL:32}



static void Test_BFu9s_L_BFu32ll()
{
  {
    init_simple_test("BFu9s_L_BFu32ll");
    static STRUCT_IF_C BFu9s_L_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu9s_L_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu9s_L_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu32ll, BFu9s_L_BFu32ll)
//============================================================================


struct  BFu9s_L_BFu33  {
  unsigned short v1:9;
  __tsi64 v2;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_L_BFu33) C1{ Fs:9 FL FL:33}



static void Test_BFu9s_L_BFu33()
{
  {
    init_simple_test("BFu9s_L_BFu33");
    static STRUCT_IF_C BFu9s_L_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu9s_L_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu9s_L_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu9s_L_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu33, BFu9s_L_BFu33)
//============================================================================


struct  BFu9s_L_BFu7c  {
  unsigned short v1:9;
  __tsi64 v2;
  unsigned char v3:7;
};
//SIG(1 BFu9s_L_BFu7c) C1{ Fs:9 FL Fc:7}



static void Test_BFu9s_L_BFu7c()
{
  {
    init_simple_test("BFu9s_L_BFu7c");
    static STRUCT_IF_C BFu9s_L_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu9s_L_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu9s_L_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu7c, BFu9s_L_BFu7c)
//============================================================================


struct  BFu9s_L_BFu7i  {
  unsigned short v1:9;
  __tsi64 v2;
  unsigned int v3:7;
};
//SIG(1 BFu9s_L_BFu7i) C1{ Fs:9 FL Fi:7}



static void Test_BFu9s_L_BFu7i()
{
  {
    init_simple_test("BFu9s_L_BFu7i");
    static STRUCT_IF_C BFu9s_L_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu9s_L_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu9s_L_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu7i, BFu9s_L_BFu7i)
//============================================================================


struct  BFu9s_L_BFu7ll  {
  unsigned short v1:9;
  __tsi64 v2;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_L_BFu7ll) C1{ Fs:9 FL FL:7}



static void Test_BFu9s_L_BFu7ll()
{
  {
    init_simple_test("BFu9s_L_BFu7ll");
    static STRUCT_IF_C BFu9s_L_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu9s_L_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu9s_L_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu7ll, BFu9s_L_BFu7ll)
//============================================================================


struct  BFu9s_L_BFu7s  {
  unsigned short v1:9;
  __tsi64 v2;
  unsigned short v3:7;
};
//SIG(1 BFu9s_L_BFu7s) C1{ Fs:9 FL Fs:7}



static void Test_BFu9s_L_BFu7s()
{
  {
    init_simple_test("BFu9s_L_BFu7s");
    static STRUCT_IF_C BFu9s_L_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu9s_L_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu9s_L_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu7s, BFu9s_L_BFu7s)
//============================================================================


struct  BFu9s_L_BFu8c  {
  unsigned short v1:9;
  __tsi64 v2;
  unsigned char v3:8;
};
//SIG(1 BFu9s_L_BFu8c) C1{ Fs:9 FL Fc:8}



static void Test_BFu9s_L_BFu8c()
{
  {
    init_simple_test("BFu9s_L_BFu8c");
    static STRUCT_IF_C BFu9s_L_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu9s_L_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu9s_L_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu8c, BFu9s_L_BFu8c)
//============================================================================


struct  BFu9s_L_BFu8i  {
  unsigned short v1:9;
  __tsi64 v2;
  unsigned int v3:8;
};
//SIG(1 BFu9s_L_BFu8i) C1{ Fs:9 FL Fi:8}



static void Test_BFu9s_L_BFu8i()
{
  {
    init_simple_test("BFu9s_L_BFu8i");
    static STRUCT_IF_C BFu9s_L_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu9s_L_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu9s_L_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu8i, BFu9s_L_BFu8i)
//============================================================================


struct  BFu9s_L_BFu8ll  {
  unsigned short v1:9;
  __tsi64 v2;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_L_BFu8ll) C1{ Fs:9 FL FL:8}



static void Test_BFu9s_L_BFu8ll()
{
  {
    init_simple_test("BFu9s_L_BFu8ll");
    static STRUCT_IF_C BFu9s_L_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu9s_L_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu9s_L_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu8ll, BFu9s_L_BFu8ll)
//============================================================================


struct  BFu9s_L_BFu8s  {
  unsigned short v1:9;
  __tsi64 v2;
  unsigned short v3:8;
};
//SIG(1 BFu9s_L_BFu8s) C1{ Fs:9 FL Fs:8}



static void Test_BFu9s_L_BFu8s()
{
  {
    init_simple_test("BFu9s_L_BFu8s");
    static STRUCT_IF_C BFu9s_L_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu9s_L_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu9s_L_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu8s, BFu9s_L_BFu8s)
//============================================================================


struct  BFu9s_L_BFu9i  {
  unsigned short v1:9;
  __tsi64 v2;
  unsigned int v3:9;
};
//SIG(1 BFu9s_L_BFu9i) C1{ Fs:9 FL Fi:9}



static void Test_BFu9s_L_BFu9i()
{
  {
    init_simple_test("BFu9s_L_BFu9i");
    static STRUCT_IF_C BFu9s_L_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu9s_L_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu9i, BFu9s_L_BFu9i)
//============================================================================


struct  BFu9s_L_BFu9ll  {
  unsigned short v1:9;
  __tsi64 v2;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_L_BFu9ll) C1{ Fs:9 FL FL:9}



static void Test_BFu9s_L_BFu9ll()
{
  {
    init_simple_test("BFu9s_L_BFu9ll");
    static STRUCT_IF_C BFu9s_L_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu9s_L_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu9ll, BFu9s_L_BFu9ll)
//============================================================================


struct  BFu9s_L_BFu9s  {
  unsigned short v1:9;
  __tsi64 v2;
  unsigned short v3:9;
};
//SIG(1 BFu9s_L_BFu9s) C1{ Fs:9 FL Fs:9}



static void Test_BFu9s_L_BFu9s()
{
  {
    init_simple_test("BFu9s_L_BFu9s");
    static STRUCT_IF_C BFu9s_L_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu9s_L_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu9s, BFu9s_L_BFu9s)
//============================================================================


struct  BFu9s_L_C  {
  unsigned short v1:9;
  __tsi64 v2;
  char v3;
};
//SIG(1 BFu9s_L_C) C1{ Fs:9 FL Fc}



static void Test_BFu9s_L_C()
{
  {
    init_simple_test("BFu9s_L_C");
    static STRUCT_IF_C BFu9s_L_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_L_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_C, BFu9s_L_C)
//============================================================================


struct  BFu9s_L_D  {
  unsigned short v1:9;
  __tsi64 v2;
  double v3;
};
//SIG(1 BFu9s_L_D) C1{ Fs:9 FL[2]}



static void Test_BFu9s_L_D()
{
  {
    init_simple_test("BFu9s_L_D");
    static STRUCT_IF_C BFu9s_L_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu9s_L_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_L_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_D, BFu9s_L_D)
//============================================================================


struct  BFu9s_L_F  {
  unsigned short v1:9;
  __tsi64 v2;
  float v3;
};
//SIG(1 BFu9s_L_F) C1{ Fs:9 FL Fi}



static void Test_BFu9s_L_F()
{
  {
    init_simple_test("BFu9s_L_F");
    static STRUCT_IF_C BFu9s_L_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_L_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_F, BFu9s_L_F)
//============================================================================


struct  BFu9s_L_I  {
  unsigned short v1:9;
  __tsi64 v2;
  int v3;
};
//SIG(1 BFu9s_L_I) C1{ Fs:9 FL Fi}



static void Test_BFu9s_L_I()
{
  {
    init_simple_test("BFu9s_L_I");
    static STRUCT_IF_C BFu9s_L_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_L_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_I, BFu9s_L_I)
//============================================================================


struct  BFu9s_L_Ip  {
  unsigned short v1:9;
  __tsi64 v2;
  int *v3;
};
//SIG(1 BFu9s_L_Ip) C1{ Fs:9 FL Fp}



static void Test_BFu9s_L_Ip()
{
  {
    init_simple_test("BFu9s_L_Ip");
    static STRUCT_IF_C BFu9s_L_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_L_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_Ip, BFu9s_L_Ip)
//============================================================================


struct  BFu9s_L_L  {
  unsigned short v1:9;
  __tsi64 v2;
  __tsi64 v3;
};
//SIG(1 BFu9s_L_L) C1{ Fs:9 FL[2]}



static void Test_BFu9s_L_L()
{
  {
    init_simple_test("BFu9s_L_L");
    static STRUCT_IF_C BFu9s_L_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu9s_L_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_L_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_L, BFu9s_L_L)
//============================================================================


struct  BFu9s_L_S  {
  unsigned short v1:9;
  __tsi64 v2;
  short v3;
};
//SIG(1 BFu9s_L_S) C1{ Fs:9 FL Fs}



static void Test_BFu9s_L_S()
{
  {
    init_simple_test("BFu9s_L_S");
    static STRUCT_IF_C BFu9s_L_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_L_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_S, BFu9s_L_S)
//============================================================================


struct  BFu9s_L_Uc  {
  unsigned short v1:9;
  __tsi64 v2;
  unsigned char v3;
};
//SIG(1 BFu9s_L_Uc) C1{ Fs:9 FL Fc}



static void Test_BFu9s_L_Uc()
{
  {
    init_simple_test("BFu9s_L_Uc");
    static STRUCT_IF_C BFu9s_L_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_L_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_Uc, BFu9s_L_Uc)
//============================================================================


struct  BFu9s_L_Ui  {
  unsigned short v1:9;
  __tsi64 v2;
  unsigned int v3;
};
//SIG(1 BFu9s_L_Ui) C1{ Fs:9 FL Fi}



static void Test_BFu9s_L_Ui()
{
  {
    init_simple_test("BFu9s_L_Ui");
    static STRUCT_IF_C BFu9s_L_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_L_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_Ui, BFu9s_L_Ui)
//============================================================================


struct  BFu9s_L_Ul  {
  unsigned short v1:9;
  __tsi64 v2;
  __tsu64 v3;
};
//SIG(1 BFu9s_L_Ul) C1{ Fs:9 FL[2]}



static void Test_BFu9s_L_Ul()
{
  {
    init_simple_test("BFu9s_L_Ul");
    static STRUCT_IF_C BFu9s_L_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu9s_L_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_L_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_Ul, BFu9s_L_Ul)
//============================================================================


struct  BFu9s_L_Us  {
  unsigned short v1:9;
  __tsi64 v2;
  unsigned short v3;
};
//SIG(1 BFu9s_L_Us) C1{ Fs:9 FL Fs}



static void Test_BFu9s_L_Us()
{
  {
    init_simple_test("BFu9s_L_Us");
    static STRUCT_IF_C BFu9s_L_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_L_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_Us, BFu9s_L_Us)
//============================================================================


struct  BFu9s_L_Vp  {
  unsigned short v1:9;
  __tsi64 v2;
  void *v3;
};
//SIG(1 BFu9s_L_Vp) C1{ Fs:9 FL Fp}



static void Test_BFu9s_L_Vp()
{
  {
    init_simple_test("BFu9s_L_Vp");
    static STRUCT_IF_C BFu9s_L_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_L_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_L_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_Vp, BFu9s_L_Vp)
//============================================================================


struct  BFu9s_S  {
  unsigned short v1:9;
  short v2;
};
//SIG(1 BFu9s_S) C1{ Fs:9 Fs}



static void Test_BFu9s_S()
{
  {
    init_simple_test("BFu9s_S");
    static STRUCT_IF_C BFu9s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S");
    check_field_offset(lv, v2, 2, "BFu9s_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S, BFu9s_S)
//============================================================================


struct  BFu9s_S_BFu15i  {
  unsigned short v1:9;
  short v2;
  unsigned int v3:15;
};
//SIG(1 BFu9s_S_BFu15i) C1{ Fs:9 Fs Fi:15}



static void Test_BFu9s_S_BFu15i()
{
  {
    init_simple_test("BFu9s_S_BFu15i");
    static STRUCT_IF_C BFu9s_S_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_S_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_S_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu15i");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_S_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_S_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu15i, BFu9s_S_BFu15i)
//============================================================================


struct  BFu9s_S_BFu15ll  {
  unsigned short v1:9;
  short v2;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_S_BFu15ll) C1{ Fs:9 Fs FL:15}



static void Test_BFu9s_S_BFu15ll()
{
  {
    init_simple_test("BFu9s_S_BFu15ll");
    static STRUCT_IF_C BFu9s_S_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_S_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_S_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu15ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_S_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_S_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu15ll, BFu9s_S_BFu15ll)
//============================================================================


struct  BFu9s_S_BFu15s  {
  unsigned short v1:9;
  short v2;
  unsigned short v3:15;
};
//SIG(1 BFu9s_S_BFu15s) C1{ Fs:9 Fs Fs:15}



static void Test_BFu9s_S_BFu15s()
{
  {
    init_simple_test("BFu9s_S_BFu15s");
    static STRUCT_IF_C BFu9s_S_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_S_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_S_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu15s");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_S_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_S_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu15s, BFu9s_S_BFu15s)
//============================================================================


struct  BFu9s_S_BFu16i  {
  unsigned short v1:9;
  short v2;
  unsigned int v3:16;
};
//SIG(1 BFu9s_S_BFu16i) C1{ Fs:9 Fs Fi:16}



static void Test_BFu9s_S_BFu16i()
{
  {
    init_simple_test("BFu9s_S_BFu16i");
    static STRUCT_IF_C BFu9s_S_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_S_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_S_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu16i");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_S_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_S_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu16i, BFu9s_S_BFu16i)
//============================================================================


struct  BFu9s_S_BFu16ll  {
  unsigned short v1:9;
  short v2;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_S_BFu16ll) C1{ Fs:9 Fs FL:16}



static void Test_BFu9s_S_BFu16ll()
{
  {
    init_simple_test("BFu9s_S_BFu16ll");
    static STRUCT_IF_C BFu9s_S_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_S_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_S_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu16ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_S_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_S_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu16ll, BFu9s_S_BFu16ll)
//============================================================================


struct  BFu9s_S_BFu16s  {
  unsigned short v1:9;
  short v2;
  unsigned short v3:16;
};
//SIG(1 BFu9s_S_BFu16s) C1{ Fs:9 Fs Fs:16}



static void Test_BFu9s_S_BFu16s()
{
  {
    init_simple_test("BFu9s_S_BFu16s");
    static STRUCT_IF_C BFu9s_S_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_S_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_S_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu16s");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_S_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_S_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu16s, BFu9s_S_BFu16s)
//============================================================================


struct  BFu9s_S_BFu17i  {
  unsigned short v1:9;
  short v2;
  unsigned int v3:17;
};
//SIG(1 BFu9s_S_BFu17i) C1{ Fs:9 Fs Fi:17}



static void Test_BFu9s_S_BFu17i()
{
  {
    init_simple_test("BFu9s_S_BFu17i");
    static STRUCT_IF_C BFu9s_S_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_S_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_S_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu17i");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu9s_S_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_S_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu17i, BFu9s_S_BFu17i)
//============================================================================


struct  BFu9s_S_BFu17ll  {
  unsigned short v1:9;
  short v2;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_S_BFu17ll) C1{ Fs:9 Fs FL:17}



static void Test_BFu9s_S_BFu17ll()
{
  {
    init_simple_test("BFu9s_S_BFu17ll");
    static STRUCT_IF_C BFu9s_S_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_S_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_S_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu17ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu9s_S_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_S_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu17ll, BFu9s_S_BFu17ll)
//============================================================================


struct  BFu9s_S_BFu1c  {
  unsigned short v1:9;
  short v2;
  unsigned char v3:1;
};
//SIG(1 BFu9s_S_BFu1c) C1{ Fs:9 Fs Fc:1}



static void Test_BFu9s_S_BFu1c()
{
  {
    init_simple_test("BFu9s_S_BFu1c");
    static STRUCT_IF_C BFu9s_S_BFu1c lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_S_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_S_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu1c");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu1c.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu9s_S_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu1c, BFu9s_S_BFu1c)
//============================================================================


struct  BFu9s_S_BFu1i  {
  unsigned short v1:9;
  short v2;
  unsigned int v3:1;
};
//SIG(1 BFu9s_S_BFu1i) C1{ Fs:9 Fs Fi:1}



static void Test_BFu9s_S_BFu1i()
{
  {
    init_simple_test("BFu9s_S_BFu1i");
    static STRUCT_IF_C BFu9s_S_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_S_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_S_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu1i");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu1i.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu9s_S_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu1i, BFu9s_S_BFu1i)
//============================================================================


struct  BFu9s_S_BFu1ll  {
  unsigned short v1:9;
  short v2;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_S_BFu1ll) C1{ Fs:9 Fs FL:1}



static void Test_BFu9s_S_BFu1ll()
{
  {
    init_simple_test("BFu9s_S_BFu1ll");
    static STRUCT_IF_C BFu9s_S_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_S_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_S_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu1ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu9s_S_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu1ll, BFu9s_S_BFu1ll)
//============================================================================


struct  BFu9s_S_BFu1s  {
  unsigned short v1:9;
  short v2;
  unsigned short v3:1;
};
//SIG(1 BFu9s_S_BFu1s) C1{ Fs:9 Fs Fs:1}



static void Test_BFu9s_S_BFu1s()
{
  {
    init_simple_test("BFu9s_S_BFu1s");
    static STRUCT_IF_C BFu9s_S_BFu1s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_S_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_S_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu1s");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu1s.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu9s_S_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu1s, BFu9s_S_BFu1s)
//============================================================================


struct  BFu9s_S_BFu31i  {
  unsigned short v1:9;
  short v2;
  unsigned int v3:31;
};
//SIG(1 BFu9s_S_BFu31i) C1{ Fs:9 Fs Fi:31}



static void Test_BFu9s_S_BFu31i()
{
  {
    init_simple_test("BFu9s_S_BFu31i");
    static STRUCT_IF_C BFu9s_S_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_S_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_S_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu31i");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_S_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_S_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu31i, BFu9s_S_BFu31i)
//============================================================================


struct  BFu9s_S_BFu31ll  {
  unsigned short v1:9;
  short v2;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_S_BFu31ll) C1{ Fs:9 Fs FL:31}



static void Test_BFu9s_S_BFu31ll()
{
  {
    init_simple_test("BFu9s_S_BFu31ll");
    static STRUCT_IF_C BFu9s_S_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_S_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_S_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu31ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_S_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_S_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu31ll, BFu9s_S_BFu31ll)
//============================================================================


struct  BFu9s_S_BFu32i  {
  unsigned short v1:9;
  short v2;
  unsigned int v3:32;
};
//SIG(1 BFu9s_S_BFu32i) C1{ Fs:9 Fs Fi:32}



static void Test_BFu9s_S_BFu32i()
{
  {
    init_simple_test("BFu9s_S_BFu32i");
    static STRUCT_IF_C BFu9s_S_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_S_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_S_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu32i");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_S_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_S_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu32i, BFu9s_S_BFu32i)
//============================================================================


struct  BFu9s_S_BFu32ll  {
  unsigned short v1:9;
  short v2;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_S_BFu32ll) C1{ Fs:9 Fs FL:32}



static void Test_BFu9s_S_BFu32ll()
{
  {
    init_simple_test("BFu9s_S_BFu32ll");
    static STRUCT_IF_C BFu9s_S_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_S_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_S_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu32ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_S_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_S_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu32ll, BFu9s_S_BFu32ll)
//============================================================================


struct  BFu9s_S_BFu33  {
  unsigned short v1:9;
  short v2;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_S_BFu33) C1{ Fs:9 Fs FL:33}



static void Test_BFu9s_S_BFu33()
{
  {
    init_simple_test("BFu9s_S_BFu33");
    static STRUCT_IF_C BFu9s_S_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_S_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_S_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu33");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu9s_S_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu9s_S_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu33, BFu9s_S_BFu33)
//============================================================================


struct  BFu9s_S_BFu7c  {
  unsigned short v1:9;
  short v2;
  unsigned char v3:7;
};
//SIG(1 BFu9s_S_BFu7c) C1{ Fs:9 Fs Fc:7}



static void Test_BFu9s_S_BFu7c()
{
  {
    init_simple_test("BFu9s_S_BFu7c");
    static STRUCT_IF_C BFu9s_S_BFu7c lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_S_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_S_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu7c");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu7c.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu9s_S_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu9s_S_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu7c, BFu9s_S_BFu7c)
//============================================================================


struct  BFu9s_S_BFu7i  {
  unsigned short v1:9;
  short v2;
  unsigned int v3:7;
};
//SIG(1 BFu9s_S_BFu7i) C1{ Fs:9 Fs Fi:7}



static void Test_BFu9s_S_BFu7i()
{
  {
    init_simple_test("BFu9s_S_BFu7i");
    static STRUCT_IF_C BFu9s_S_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_S_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_S_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu7i");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu7i.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu9s_S_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu9s_S_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu7i, BFu9s_S_BFu7i)
//============================================================================


struct  BFu9s_S_BFu7ll  {
  unsigned short v1:9;
  short v2;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_S_BFu7ll) C1{ Fs:9 Fs FL:7}



static void Test_BFu9s_S_BFu7ll()
{
  {
    init_simple_test("BFu9s_S_BFu7ll");
    static STRUCT_IF_C BFu9s_S_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_S_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_S_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu7ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu9s_S_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu9s_S_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu7ll, BFu9s_S_BFu7ll)
//============================================================================


struct  BFu9s_S_BFu7s  {
  unsigned short v1:9;
  short v2;
  unsigned short v3:7;
};
//SIG(1 BFu9s_S_BFu7s) C1{ Fs:9 Fs Fs:7}



static void Test_BFu9s_S_BFu7s()
{
  {
    init_simple_test("BFu9s_S_BFu7s");
    static STRUCT_IF_C BFu9s_S_BFu7s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_S_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_S_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu7s");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu7s.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu9s_S_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu9s_S_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu7s, BFu9s_S_BFu7s)
//============================================================================


struct  BFu9s_S_BFu8c  {
  unsigned short v1:9;
  short v2;
  unsigned char v3:8;
};
//SIG(1 BFu9s_S_BFu8c) C1{ Fs:9 Fs Fc:8}



static void Test_BFu9s_S_BFu8c()
{
  {
    init_simple_test("BFu9s_S_BFu8c");
    static STRUCT_IF_C BFu9s_S_BFu8c lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_S_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_S_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu8c");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu8c.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_S_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_S_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu8c, BFu9s_S_BFu8c)
//============================================================================


struct  BFu9s_S_BFu8i  {
  unsigned short v1:9;
  short v2;
  unsigned int v3:8;
};
//SIG(1 BFu9s_S_BFu8i) C1{ Fs:9 Fs Fi:8}



static void Test_BFu9s_S_BFu8i()
{
  {
    init_simple_test("BFu9s_S_BFu8i");
    static STRUCT_IF_C BFu9s_S_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_S_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_S_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu8i");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu8i.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_S_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_S_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu8i, BFu9s_S_BFu8i)
//============================================================================


struct  BFu9s_S_BFu8ll  {
  unsigned short v1:9;
  short v2;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_S_BFu8ll) C1{ Fs:9 Fs FL:8}



static void Test_BFu9s_S_BFu8ll()
{
  {
    init_simple_test("BFu9s_S_BFu8ll");
    static STRUCT_IF_C BFu9s_S_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_S_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_S_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu8ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_S_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_S_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu8ll, BFu9s_S_BFu8ll)
//============================================================================


struct  BFu9s_S_BFu8s  {
  unsigned short v1:9;
  short v2;
  unsigned short v3:8;
};
//SIG(1 BFu9s_S_BFu8s) C1{ Fs:9 Fs Fs:8}



static void Test_BFu9s_S_BFu8s()
{
  {
    init_simple_test("BFu9s_S_BFu8s");
    static STRUCT_IF_C BFu9s_S_BFu8s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_S_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_S_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu8s");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu8s.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_S_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_S_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu8s, BFu9s_S_BFu8s)
//============================================================================


struct  BFu9s_S_BFu9i  {
  unsigned short v1:9;
  short v2;
  unsigned int v3:9;
};
//SIG(1 BFu9s_S_BFu9i) C1{ Fs:9 Fs Fi:9}



static void Test_BFu9s_S_BFu9i()
{
  {
    init_simple_test("BFu9s_S_BFu9i");
    static STRUCT_IF_C BFu9s_S_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_S_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_S_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu9i");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_S_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu9i, BFu9s_S_BFu9i)
//============================================================================


struct  BFu9s_S_BFu9ll  {
  unsigned short v1:9;
  short v2;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_S_BFu9ll) C1{ Fs:9 Fs FL:9}



static void Test_BFu9s_S_BFu9ll()
{
  {
    init_simple_test("BFu9s_S_BFu9ll");
    static STRUCT_IF_C BFu9s_S_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_S_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_S_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu9ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_S_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu9ll, BFu9s_S_BFu9ll)
//============================================================================


struct  BFu9s_S_BFu9s  {
  unsigned short v1:9;
  short v2;
  unsigned short v3:9;
};
//SIG(1 BFu9s_S_BFu9s) C1{ Fs:9 Fs Fs:9}



static void Test_BFu9s_S_BFu9s()
{
  {
    init_simple_test("BFu9s_S_BFu9s");
    static STRUCT_IF_C BFu9s_S_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_S_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_S_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu9s");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_S_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu9s, BFu9s_S_BFu9s)
//============================================================================


struct  BFu9s_S_C  {
  unsigned short v1:9;
  short v2;
  char v3;
};
//SIG(1 BFu9s_S_C) C1{ Fs:9 Fs Fc}



static void Test_BFu9s_S_C()
{
  {
    init_simple_test("BFu9s_S_C");
    static STRUCT_IF_C BFu9s_S_C lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_S_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_S_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_C");
    check_field_offset(lv, v2, 2, "BFu9s_S_C.v2");
    check_field_offset(lv, v3, 4, "BFu9s_S_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_C, BFu9s_S_C)
//============================================================================


struct  BFu9s_S_D  {
  unsigned short v1:9;
  short v2;
  double v3;
};
//SIG(1 BFu9s_S_D) C1{ Fs:9 Fs FL}



static void Test_BFu9s_S_D()
{
  {
    init_simple_test("BFu9s_S_D");
    static STRUCT_IF_C BFu9s_S_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_S_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_S_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_D");
    check_field_offset(lv, v2, 2, "BFu9s_S_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_S_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_D, BFu9s_S_D)
//============================================================================


struct  BFu9s_S_F  {
  unsigned short v1:9;
  short v2;
  float v3;
};
//SIG(1 BFu9s_S_F) C1{ Fs:9 Fs Fi}



static void Test_BFu9s_S_F()
{
  {
    init_simple_test("BFu9s_S_F");
    static STRUCT_IF_C BFu9s_S_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_S_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_S_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_F");
    check_field_offset(lv, v2, 2, "BFu9s_S_F.v2");
    check_field_offset(lv, v3, 4, "BFu9s_S_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_F, BFu9s_S_F)
//============================================================================


struct  BFu9s_S_I  {
  unsigned short v1:9;
  short v2;
  int v3;
};
//SIG(1 BFu9s_S_I) C1{ Fs:9 Fs Fi}



static void Test_BFu9s_S_I()
{
  {
    init_simple_test("BFu9s_S_I");
    static STRUCT_IF_C BFu9s_S_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_S_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_S_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_I");
    check_field_offset(lv, v2, 2, "BFu9s_S_I.v2");
    check_field_offset(lv, v3, 4, "BFu9s_S_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_I, BFu9s_S_I)
//============================================================================


struct  BFu9s_S_Ip  {
  unsigned short v1:9;
  short v2;
  int *v3;
};
//SIG(1 BFu9s_S_Ip) C1{ Fs:9 Fs Fp}



static void Test_BFu9s_S_Ip()
{
  {
    init_simple_test("BFu9s_S_Ip");
    static STRUCT_IF_C BFu9s_S_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_S_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_S_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_Ip");
    check_field_offset(lv, v2, 2, "BFu9s_S_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_S_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_Ip, BFu9s_S_Ip)
//============================================================================


struct  BFu9s_S_L  {
  unsigned short v1:9;
  short v2;
  __tsi64 v3;
};
//SIG(1 BFu9s_S_L) C1{ Fs:9 Fs FL}



static void Test_BFu9s_S_L()
{
  {
    init_simple_test("BFu9s_S_L");
    static STRUCT_IF_C BFu9s_S_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_S_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_S_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_L");
    check_field_offset(lv, v2, 2, "BFu9s_S_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_S_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_L, BFu9s_S_L)
//============================================================================


struct  BFu9s_S_S  {
  unsigned short v1:9;
  short v2;
  short v3;
};
//SIG(1 BFu9s_S_S) C1{ Fs:9 Fs[2]}



static void Test_BFu9s_S_S()
{
  {
    init_simple_test("BFu9s_S_S");
    static STRUCT_IF_C BFu9s_S_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_S_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_S_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_S");
    check_field_offset(lv, v2, 2, "BFu9s_S_S.v2");
    check_field_offset(lv, v3, 4, "BFu9s_S_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_S, BFu9s_S_S)
//============================================================================


struct  BFu9s_S_Uc  {
  unsigned short v1:9;
  short v2;
  unsigned char v3;
};
//SIG(1 BFu9s_S_Uc) C1{ Fs:9 Fs Fc}



static void Test_BFu9s_S_Uc()
{
  {
    init_simple_test("BFu9s_S_Uc");
    static STRUCT_IF_C BFu9s_S_Uc lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_S_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_S_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_Uc");
    check_field_offset(lv, v2, 2, "BFu9s_S_Uc.v2");
    check_field_offset(lv, v3, 4, "BFu9s_S_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_Uc, BFu9s_S_Uc)
//============================================================================


struct  BFu9s_S_Ui  {
  unsigned short v1:9;
  short v2;
  unsigned int v3;
};
//SIG(1 BFu9s_S_Ui) C1{ Fs:9 Fs Fi}



static void Test_BFu9s_S_Ui()
{
  {
    init_simple_test("BFu9s_S_Ui");
    static STRUCT_IF_C BFu9s_S_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_S_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_S_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_Ui");
    check_field_offset(lv, v2, 2, "BFu9s_S_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu9s_S_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_Ui, BFu9s_S_Ui)
//============================================================================


struct  BFu9s_S_Ul  {
  unsigned short v1:9;
  short v2;
  __tsu64 v3;
};
//SIG(1 BFu9s_S_Ul) C1{ Fs:9 Fs FL}



static void Test_BFu9s_S_Ul()
{
  {
    init_simple_test("BFu9s_S_Ul");
    static STRUCT_IF_C BFu9s_S_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_S_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_S_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_Ul");
    check_field_offset(lv, v2, 2, "BFu9s_S_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_S_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_Ul, BFu9s_S_Ul)
//============================================================================


struct  BFu9s_S_Us  {
  unsigned short v1:9;
  short v2;
  unsigned short v3;
};
//SIG(1 BFu9s_S_Us) C1{ Fs:9 Fs[2]}



static void Test_BFu9s_S_Us()
{
  {
    init_simple_test("BFu9s_S_Us");
    static STRUCT_IF_C BFu9s_S_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_S_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_S_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_Us");
    check_field_offset(lv, v2, 2, "BFu9s_S_Us.v2");
    check_field_offset(lv, v3, 4, "BFu9s_S_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_Us, BFu9s_S_Us)
//============================================================================


struct  BFu9s_S_Vp  {
  unsigned short v1:9;
  short v2;
  void *v3;
};
//SIG(1 BFu9s_S_Vp) C1{ Fs:9 Fs Fp}



static void Test_BFu9s_S_Vp()
{
  {
    init_simple_test("BFu9s_S_Vp");
    static STRUCT_IF_C BFu9s_S_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_S_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_S_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_Vp");
    check_field_offset(lv, v2, 2, "BFu9s_S_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_S_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_Vp, BFu9s_S_Vp)
//============================================================================


struct  BFu9s_Uc  {
  unsigned short v1:9;
  unsigned char v2;
};
//SIG(1 BFu9s_Uc) C1{ Fs:9 Fc}



static void Test_BFu9s_Uc()
{
  {
    init_simple_test("BFu9s_Uc");
    static STRUCT_IF_C BFu9s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc");
    check_field_offset(lv, v2, 2, "BFu9s_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc, BFu9s_Uc)
//============================================================================


struct  BFu9s_Uc_BFu15i  {
  unsigned short v1:9;
  unsigned char v2;
  unsigned int v3:15;
};
//SIG(1 BFu9s_Uc_BFu15i) C1{ Fs:9 Fc Fi:15}



static void Test_BFu9s_Uc_BFu15i()
{
  {
    init_simple_test("BFu9s_Uc_BFu15i");
    static STRUCT_IF_C BFu9s_Uc_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Uc_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Uc_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu15i");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_Uc_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_Uc_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu15i, BFu9s_Uc_BFu15i)
//============================================================================


struct  BFu9s_Uc_BFu15ll  {
  unsigned short v1:9;
  unsigned char v2;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_Uc_BFu15ll) C1{ Fs:9 Fc FL:15}



static void Test_BFu9s_Uc_BFu15ll()
{
  {
    init_simple_test("BFu9s_Uc_BFu15ll");
    static STRUCT_IF_C BFu9s_Uc_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Uc_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Uc_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu15ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu9s_Uc_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu9s_Uc_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu15ll, BFu9s_Uc_BFu15ll)
//============================================================================


struct  BFu9s_Uc_BFu15s  {
  unsigned short v1:9;
  unsigned char v2;
  unsigned short v3:15;
};
//SIG(1 BFu9s_Uc_BFu15s) C1{ Fs:9 Fc Fs:15}



static void Test_BFu9s_Uc_BFu15s()
{
  {
    init_simple_test("BFu9s_Uc_BFu15s");
    static STRUCT_IF_C BFu9s_Uc_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_Uc_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Uc_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu15s");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_Uc_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_Uc_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu15s, BFu9s_Uc_BFu15s)
//============================================================================


struct  BFu9s_Uc_BFu16i  {
  unsigned short v1:9;
  unsigned char v2;
  unsigned int v3:16;
};
//SIG(1 BFu9s_Uc_BFu16i) C1{ Fs:9 Fc Fi:16}



static void Test_BFu9s_Uc_BFu16i()
{
  {
    init_simple_test("BFu9s_Uc_BFu16i");
    static STRUCT_IF_C BFu9s_Uc_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Uc_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Uc_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu16i");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_Uc_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_Uc_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu16i, BFu9s_Uc_BFu16i)
//============================================================================


struct  BFu9s_Uc_BFu16ll  {
  unsigned short v1:9;
  unsigned char v2;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_Uc_BFu16ll) C1{ Fs:9 Fc FL:16}



static void Test_BFu9s_Uc_BFu16ll()
{
  {
    init_simple_test("BFu9s_Uc_BFu16ll");
    static STRUCT_IF_C BFu9s_Uc_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Uc_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Uc_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu16ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu9s_Uc_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu9s_Uc_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu16ll, BFu9s_Uc_BFu16ll)
//============================================================================


struct  BFu9s_Uc_BFu16s  {
  unsigned short v1:9;
  unsigned char v2;
  unsigned short v3:16;
};
//SIG(1 BFu9s_Uc_BFu16s) C1{ Fs:9 Fc Fs:16}



static void Test_BFu9s_Uc_BFu16s()
{
  {
    init_simple_test("BFu9s_Uc_BFu16s");
    static STRUCT_IF_C BFu9s_Uc_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_Uc_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Uc_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu16s");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_Uc_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_Uc_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu16s, BFu9s_Uc_BFu16s)
//============================================================================


struct  BFu9s_Uc_BFu17i  {
  unsigned short v1:9;
  unsigned char v2;
  unsigned int v3:17;
};
//SIG(1 BFu9s_Uc_BFu17i) C1{ Fs:9 Fc Fi:17}



static void Test_BFu9s_Uc_BFu17i()
{
  {
    init_simple_test("BFu9s_Uc_BFu17i");
    static STRUCT_IF_C BFu9s_Uc_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Uc_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Uc_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu17i");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu9s_Uc_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_Uc_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu17i, BFu9s_Uc_BFu17i)
//============================================================================


struct  BFu9s_Uc_BFu17ll  {
  unsigned short v1:9;
  unsigned char v2;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_Uc_BFu17ll) C1{ Fs:9 Fc FL:17}



static void Test_BFu9s_Uc_BFu17ll()
{
  {
    init_simple_test("BFu9s_Uc_BFu17ll");
    static STRUCT_IF_C BFu9s_Uc_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Uc_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Uc_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu17ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu9s_Uc_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu9s_Uc_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu17ll, BFu9s_Uc_BFu17ll)
//============================================================================


struct  BFu9s_Uc_BFu1c  {
  unsigned short v1:9;
  unsigned char v2;
  unsigned char v3:1;
};
//SIG(1 BFu9s_Uc_BFu1c) C1{ Fs:9 Fc Fc:1}



static void Test_BFu9s_Uc_BFu1c()
{
  {
    init_simple_test("BFu9s_Uc_BFu1c");
    static STRUCT_IF_C BFu9s_Uc_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_Uc_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Uc_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu1c");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu1c.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu9s_Uc_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu1c, BFu9s_Uc_BFu1c)
//============================================================================


struct  BFu9s_Uc_BFu1i  {
  unsigned short v1:9;
  unsigned char v2;
  unsigned int v3:1;
};
//SIG(1 BFu9s_Uc_BFu1i) C1{ Fs:9 Fc Fi:1}



static void Test_BFu9s_Uc_BFu1i()
{
  {
    init_simple_test("BFu9s_Uc_BFu1i");
    static STRUCT_IF_C BFu9s_Uc_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_Uc_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Uc_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu1i");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu1i.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu9s_Uc_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu1i, BFu9s_Uc_BFu1i)
//============================================================================


struct  BFu9s_Uc_BFu1ll  {
  unsigned short v1:9;
  unsigned char v2;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_Uc_BFu1ll) C1{ Fs:9 Fc FL:1}



static void Test_BFu9s_Uc_BFu1ll()
{
  {
    init_simple_test("BFu9s_Uc_BFu1ll");
    static STRUCT_IF_C BFu9s_Uc_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_Uc_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Uc_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu1ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu9s_Uc_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu1ll, BFu9s_Uc_BFu1ll)
//============================================================================


struct  BFu9s_Uc_BFu1s  {
  unsigned short v1:9;
  unsigned char v2;
  unsigned short v3:1;
};
//SIG(1 BFu9s_Uc_BFu1s) C1{ Fs:9 Fc Fs:1}



static void Test_BFu9s_Uc_BFu1s()
{
  {
    init_simple_test("BFu9s_Uc_BFu1s");
    static STRUCT_IF_C BFu9s_Uc_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_Uc_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Uc_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu1s");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu1s.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu9s_Uc_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu1s, BFu9s_Uc_BFu1s)
//============================================================================


struct  BFu9s_Uc_BFu31i  {
  unsigned short v1:9;
  unsigned char v2;
  unsigned int v3:31;
};
//SIG(1 BFu9s_Uc_BFu31i) C1{ Fs:9 Fc Fi:31}



static void Test_BFu9s_Uc_BFu31i()
{
  {
    init_simple_test("BFu9s_Uc_BFu31i");
    static STRUCT_IF_C BFu9s_Uc_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Uc_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Uc_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu31i");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_Uc_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_Uc_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu31i, BFu9s_Uc_BFu31i)
//============================================================================


struct  BFu9s_Uc_BFu31ll  {
  unsigned short v1:9;
  unsigned char v2;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_Uc_BFu31ll) C1{ Fs:9 Fc FL:31}



static void Test_BFu9s_Uc_BFu31ll()
{
  {
    init_simple_test("BFu9s_Uc_BFu31ll");
    static STRUCT_IF_C BFu9s_Uc_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Uc_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Uc_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu31ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu9s_Uc_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu9s_Uc_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu31ll, BFu9s_Uc_BFu31ll)
//============================================================================


struct  BFu9s_Uc_BFu32i  {
  unsigned short v1:9;
  unsigned char v2;
  unsigned int v3:32;
};
//SIG(1 BFu9s_Uc_BFu32i) C1{ Fs:9 Fc Fi:32}



static void Test_BFu9s_Uc_BFu32i()
{
  {
    init_simple_test("BFu9s_Uc_BFu32i");
    static STRUCT_IF_C BFu9s_Uc_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Uc_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Uc_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu32i");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_Uc_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_Uc_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu32i, BFu9s_Uc_BFu32i)
//============================================================================


struct  BFu9s_Uc_BFu32ll  {
  unsigned short v1:9;
  unsigned char v2;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_Uc_BFu32ll) C1{ Fs:9 Fc FL:32}



static void Test_BFu9s_Uc_BFu32ll()
{
  {
    init_simple_test("BFu9s_Uc_BFu32ll");
    static STRUCT_IF_C BFu9s_Uc_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Uc_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Uc_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu32ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu9s_Uc_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu9s_Uc_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu32ll, BFu9s_Uc_BFu32ll)
//============================================================================


struct  BFu9s_Uc_BFu33  {
  unsigned short v1:9;
  unsigned char v2;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_Uc_BFu33) C1{ Fs:9 Fc FL:33}



static void Test_BFu9s_Uc_BFu33()
{
  {
    init_simple_test("BFu9s_Uc_BFu33");
    static STRUCT_IF_C BFu9s_Uc_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Uc_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Uc_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu33");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu33.v2");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu9s_Uc_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu9s_Uc_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu33, BFu9s_Uc_BFu33)
//============================================================================


struct  BFu9s_Uc_BFu7c  {
  unsigned short v1:9;
  unsigned char v2;
  unsigned char v3:7;
};
//SIG(1 BFu9s_Uc_BFu7c) C1{ Fs:9 Fc Fc:7}



static void Test_BFu9s_Uc_BFu7c()
{
  {
    init_simple_test("BFu9s_Uc_BFu7c");
    static STRUCT_IF_C BFu9s_Uc_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_Uc_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Uc_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu7c");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu7c.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu9s_Uc_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu9s_Uc_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu7c, BFu9s_Uc_BFu7c)
//============================================================================


struct  BFu9s_Uc_BFu7i  {
  unsigned short v1:9;
  unsigned char v2;
  unsigned int v3:7;
};
//SIG(1 BFu9s_Uc_BFu7i) C1{ Fs:9 Fc Fi:7}



static void Test_BFu9s_Uc_BFu7i()
{
  {
    init_simple_test("BFu9s_Uc_BFu7i");
    static STRUCT_IF_C BFu9s_Uc_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_Uc_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Uc_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu7i");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu7i.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu9s_Uc_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu9s_Uc_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu7i, BFu9s_Uc_BFu7i)
//============================================================================


struct  BFu9s_Uc_BFu7ll  {
  unsigned short v1:9;
  unsigned char v2;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_Uc_BFu7ll) C1{ Fs:9 Fc FL:7}



static void Test_BFu9s_Uc_BFu7ll()
{
  {
    init_simple_test("BFu9s_Uc_BFu7ll");
    static STRUCT_IF_C BFu9s_Uc_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_Uc_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Uc_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu7ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu9s_Uc_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu9s_Uc_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu7ll, BFu9s_Uc_BFu7ll)
//============================================================================


struct  BFu9s_Uc_BFu7s  {
  unsigned short v1:9;
  unsigned char v2;
  unsigned short v3:7;
};
//SIG(1 BFu9s_Uc_BFu7s) C1{ Fs:9 Fc Fs:7}



static void Test_BFu9s_Uc_BFu7s()
{
  {
    init_simple_test("BFu9s_Uc_BFu7s");
    static STRUCT_IF_C BFu9s_Uc_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_Uc_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Uc_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu7s");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu7s.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu9s_Uc_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu9s_Uc_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu7s, BFu9s_Uc_BFu7s)
//============================================================================


struct  BFu9s_Uc_BFu8c  {
  unsigned short v1:9;
  unsigned char v2;
  unsigned char v3:8;
};
//SIG(1 BFu9s_Uc_BFu8c) C1{ Fs:9 Fc Fc:8}



static void Test_BFu9s_Uc_BFu8c()
{
  {
    init_simple_test("BFu9s_Uc_BFu8c");
    static STRUCT_IF_C BFu9s_Uc_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_Uc_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Uc_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu8c");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu8c.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu9s_Uc_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu9s_Uc_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu8c, BFu9s_Uc_BFu8c)
//============================================================================


struct  BFu9s_Uc_BFu8i  {
  unsigned short v1:9;
  unsigned char v2;
  unsigned int v3:8;
};
//SIG(1 BFu9s_Uc_BFu8i) C1{ Fs:9 Fc Fi:8}



static void Test_BFu9s_Uc_BFu8i()
{
  {
    init_simple_test("BFu9s_Uc_BFu8i");
    static STRUCT_IF_C BFu9s_Uc_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_Uc_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Uc_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu8i");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu8i.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu9s_Uc_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu9s_Uc_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu8i, BFu9s_Uc_BFu8i)
//============================================================================


struct  BFu9s_Uc_BFu8ll  {
  unsigned short v1:9;
  unsigned char v2;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_Uc_BFu8ll) C1{ Fs:9 Fc FL:8}



static void Test_BFu9s_Uc_BFu8ll()
{
  {
    init_simple_test("BFu9s_Uc_BFu8ll");
    static STRUCT_IF_C BFu9s_Uc_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_Uc_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Uc_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu8ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu9s_Uc_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu9s_Uc_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu8ll, BFu9s_Uc_BFu8ll)
//============================================================================


struct  BFu9s_Uc_BFu8s  {
  unsigned short v1:9;
  unsigned char v2;
  unsigned short v3:8;
};
//SIG(1 BFu9s_Uc_BFu8s) C1{ Fs:9 Fc Fs:8}



static void Test_BFu9s_Uc_BFu8s()
{
  {
    init_simple_test("BFu9s_Uc_BFu8s");
    static STRUCT_IF_C BFu9s_Uc_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_Uc_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Uc_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu8s");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu8s.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu9s_Uc_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu9s_Uc_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu8s, BFu9s_Uc_BFu8s)
//============================================================================


struct  BFu9s_Uc_BFu9i  {
  unsigned short v1:9;
  unsigned char v2;
  unsigned int v3:9;
};
//SIG(1 BFu9s_Uc_BFu9i) C1{ Fs:9 Fc Fi:9}



static void Test_BFu9s_Uc_BFu9i()
{
  {
    init_simple_test("BFu9s_Uc_BFu9i");
    static STRUCT_IF_C BFu9s_Uc_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Uc_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Uc_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu9i");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_Uc_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu9i, BFu9s_Uc_BFu9i)
//============================================================================


struct  BFu9s_Uc_BFu9ll  {
  unsigned short v1:9;
  unsigned char v2;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_Uc_BFu9ll) C1{ Fs:9 Fc FL:9}



static void Test_BFu9s_Uc_BFu9ll()
{
  {
    init_simple_test("BFu9s_Uc_BFu9ll");
    static STRUCT_IF_C BFu9s_Uc_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Uc_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Uc_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu9ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu9s_Uc_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu9ll, BFu9s_Uc_BFu9ll)
//============================================================================


struct  BFu9s_Uc_BFu9s  {
  unsigned short v1:9;
  unsigned char v2;
  unsigned short v3:9;
};
//SIG(1 BFu9s_Uc_BFu9s) C1{ Fs:9 Fc Fs:9}



static void Test_BFu9s_Uc_BFu9s()
{
  {
    init_simple_test("BFu9s_Uc_BFu9s");
    static STRUCT_IF_C BFu9s_Uc_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_Uc_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Uc_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu9s");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_Uc_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu9s, BFu9s_Uc_BFu9s)
//============================================================================


struct  BFu9s_Uc_C  {
  unsigned short v1:9;
  unsigned char v2;
  char v3;
};
//SIG(1 BFu9s_Uc_C) C1{ Fs:9 Fc[2]}



static void Test_BFu9s_Uc_C()
{
  {
    init_simple_test("BFu9s_Uc_C");
    static STRUCT_IF_C BFu9s_Uc_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_Uc_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Uc_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_C");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_C.v2");
    check_field_offset(lv, v3, 3, "BFu9s_Uc_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_C, BFu9s_Uc_C)
//============================================================================


struct  BFu9s_Uc_D  {
  unsigned short v1:9;
  unsigned char v2;
  double v3;
};
//SIG(1 BFu9s_Uc_D) C1{ Fs:9 Fc FL}



static void Test_BFu9s_Uc_D()
{
  {
    init_simple_test("BFu9s_Uc_D");
    static STRUCT_IF_C BFu9s_Uc_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_Uc_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Uc_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_D");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_Uc_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_D, BFu9s_Uc_D)
//============================================================================


struct  BFu9s_Uc_F  {
  unsigned short v1:9;
  unsigned char v2;
  float v3;
};
//SIG(1 BFu9s_Uc_F) C1{ Fs:9 Fc Fi}



static void Test_BFu9s_Uc_F()
{
  {
    init_simple_test("BFu9s_Uc_F");
    static STRUCT_IF_C BFu9s_Uc_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Uc_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Uc_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_F");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_F.v2");
    check_field_offset(lv, v3, 4, "BFu9s_Uc_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_F, BFu9s_Uc_F)
//============================================================================


struct  BFu9s_Uc_I  {
  unsigned short v1:9;
  unsigned char v2;
  int v3;
};
//SIG(1 BFu9s_Uc_I) C1{ Fs:9 Fc Fi}



static void Test_BFu9s_Uc_I()
{
  {
    init_simple_test("BFu9s_Uc_I");
    static STRUCT_IF_C BFu9s_Uc_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Uc_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Uc_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_I");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_I.v2");
    check_field_offset(lv, v3, 4, "BFu9s_Uc_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_I, BFu9s_Uc_I)
//============================================================================


struct  BFu9s_Uc_Ip  {
  unsigned short v1:9;
  unsigned char v2;
  int *v3;
};
//SIG(1 BFu9s_Uc_Ip) C1{ Fs:9 Fc Fp}



static void Test_BFu9s_Uc_Ip()
{
  {
    init_simple_test("BFu9s_Uc_Ip");
    static STRUCT_IF_C BFu9s_Uc_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_Uc_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Uc_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_Ip");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_Uc_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_Ip, BFu9s_Uc_Ip)
//============================================================================


struct  BFu9s_Uc_L  {
  unsigned short v1:9;
  unsigned char v2;
  __tsi64 v3;
};
//SIG(1 BFu9s_Uc_L) C1{ Fs:9 Fc FL}



static void Test_BFu9s_Uc_L()
{
  {
    init_simple_test("BFu9s_Uc_L");
    static STRUCT_IF_C BFu9s_Uc_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_Uc_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Uc_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_L");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_Uc_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_L, BFu9s_Uc_L)
//============================================================================


struct  BFu9s_Uc_S  {
  unsigned short v1:9;
  unsigned char v2;
  short v3;
};
//SIG(1 BFu9s_Uc_S) C1{ Fs:9 Fc Fs}



static void Test_BFu9s_Uc_S()
{
  {
    init_simple_test("BFu9s_Uc_S");
    static STRUCT_IF_C BFu9s_Uc_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_Uc_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Uc_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_S");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_S.v2");
    check_field_offset(lv, v3, 4, "BFu9s_Uc_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_S, BFu9s_Uc_S)
//============================================================================


struct  BFu9s_Uc_Uc  {
  unsigned short v1:9;
  unsigned char v2;
  unsigned char v3;
};
//SIG(1 BFu9s_Uc_Uc) C1{ Fs:9 Fc[2]}



static void Test_BFu9s_Uc_Uc()
{
  {
    init_simple_test("BFu9s_Uc_Uc");
    static STRUCT_IF_C BFu9s_Uc_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_Uc_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Uc_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_Uc");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_Uc.v2");
    check_field_offset(lv, v3, 3, "BFu9s_Uc_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_Uc, BFu9s_Uc_Uc)
//============================================================================


struct  BFu9s_Uc_Ui  {
  unsigned short v1:9;
  unsigned char v2;
  unsigned int v3;
};
//SIG(1 BFu9s_Uc_Ui) C1{ Fs:9 Fc Fi}



static void Test_BFu9s_Uc_Ui()
{
  {
    init_simple_test("BFu9s_Uc_Ui");
    static STRUCT_IF_C BFu9s_Uc_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Uc_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Uc_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_Ui");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu9s_Uc_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_Ui, BFu9s_Uc_Ui)
//============================================================================


struct  BFu9s_Uc_Ul  {
  unsigned short v1:9;
  unsigned char v2;
  __tsu64 v3;
};
//SIG(1 BFu9s_Uc_Ul) C1{ Fs:9 Fc FL}



static void Test_BFu9s_Uc_Ul()
{
  {
    init_simple_test("BFu9s_Uc_Ul");
    static STRUCT_IF_C BFu9s_Uc_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_Uc_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Uc_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_Ul");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_Uc_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_Ul, BFu9s_Uc_Ul)
//============================================================================


struct  BFu9s_Uc_Us  {
  unsigned short v1:9;
  unsigned char v2;
  unsigned short v3;
};
//SIG(1 BFu9s_Uc_Us) C1{ Fs:9 Fc Fs}



static void Test_BFu9s_Uc_Us()
{
  {
    init_simple_test("BFu9s_Uc_Us");
    static STRUCT_IF_C BFu9s_Uc_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_Uc_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Uc_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_Us");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_Us.v2");
    check_field_offset(lv, v3, 4, "BFu9s_Uc_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_Us, BFu9s_Uc_Us)
//============================================================================


struct  BFu9s_Uc_Vp  {
  unsigned short v1:9;
  unsigned char v2;
  void *v3;
};
//SIG(1 BFu9s_Uc_Vp) C1{ Fs:9 Fc Fp}



static void Test_BFu9s_Uc_Vp()
{
  {
    init_simple_test("BFu9s_Uc_Vp");
    static STRUCT_IF_C BFu9s_Uc_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_Uc_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Uc_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_Vp");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_Uc_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_Vp, BFu9s_Uc_Vp)
//============================================================================


struct  BFu9s_Ui  {
  unsigned short v1:9;
  unsigned int v2;
};
//SIG(1 BFu9s_Ui) C1{ Fs:9 Fi}



static void Test_BFu9s_Ui()
{
  {
    init_simple_test("BFu9s_Ui");
    static STRUCT_IF_C BFu9s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui");
    check_field_offset(lv, v2, 4, "BFu9s_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui, BFu9s_Ui)
//============================================================================


struct  BFu9s_Ui_BFu15i  {
  unsigned short v1:9;
  unsigned int v2;
  unsigned int v3:15;
};
//SIG(1 BFu9s_Ui_BFu15i) C1{ Fs:9 Fi Fi:15}



static void Test_BFu9s_Ui_BFu15i()
{
  {
    init_simple_test("BFu9s_Ui_BFu15i");
    static STRUCT_IF_C BFu9s_Ui_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_Ui_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu15i");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu9s_Ui_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu9s_Ui_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu15i, BFu9s_Ui_BFu15i)
//============================================================================


struct  BFu9s_Ui_BFu15ll  {
  unsigned short v1:9;
  unsigned int v2;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_Ui_BFu15ll) C1{ Fs:9 Fi FL:15}



static void Test_BFu9s_Ui_BFu15ll()
{
  {
    init_simple_test("BFu9s_Ui_BFu15ll");
    static STRUCT_IF_C BFu9s_Ui_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_Ui_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ui_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu9s_Ui_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu9s_Ui_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu15ll, BFu9s_Ui_BFu15ll)
//============================================================================


struct  BFu9s_Ui_BFu15s  {
  unsigned short v1:9;
  unsigned int v2;
  unsigned short v3:15;
};
//SIG(1 BFu9s_Ui_BFu15s) C1{ Fs:9 Fi Fs:15}



static void Test_BFu9s_Ui_BFu15s()
{
  {
    init_simple_test("BFu9s_Ui_BFu15s");
    static STRUCT_IF_C BFu9s_Ui_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_Ui_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu15s");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu9s_Ui_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu9s_Ui_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu15s, BFu9s_Ui_BFu15s)
//============================================================================


struct  BFu9s_Ui_BFu16i  {
  unsigned short v1:9;
  unsigned int v2;
  unsigned int v3:16;
};
//SIG(1 BFu9s_Ui_BFu16i) C1{ Fs:9 Fi Fi:16}



static void Test_BFu9s_Ui_BFu16i()
{
  {
    init_simple_test("BFu9s_Ui_BFu16i");
    static STRUCT_IF_C BFu9s_Ui_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_Ui_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu16i");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu9s_Ui_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu9s_Ui_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu16i, BFu9s_Ui_BFu16i)
//============================================================================


struct  BFu9s_Ui_BFu16ll  {
  unsigned short v1:9;
  unsigned int v2;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_Ui_BFu16ll) C1{ Fs:9 Fi FL:16}



static void Test_BFu9s_Ui_BFu16ll()
{
  {
    init_simple_test("BFu9s_Ui_BFu16ll");
    static STRUCT_IF_C BFu9s_Ui_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_Ui_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ui_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu9s_Ui_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu9s_Ui_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu16ll, BFu9s_Ui_BFu16ll)
//============================================================================


struct  BFu9s_Ui_BFu16s  {
  unsigned short v1:9;
  unsigned int v2;
  unsigned short v3:16;
};
//SIG(1 BFu9s_Ui_BFu16s) C1{ Fs:9 Fi Fs:16}



static void Test_BFu9s_Ui_BFu16s()
{
  {
    init_simple_test("BFu9s_Ui_BFu16s");
    static STRUCT_IF_C BFu9s_Ui_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_Ui_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu16s");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu9s_Ui_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu9s_Ui_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu16s, BFu9s_Ui_BFu16s)
//============================================================================


struct  BFu9s_Ui_BFu17i  {
  unsigned short v1:9;
  unsigned int v2;
  unsigned int v3:17;
};
//SIG(1 BFu9s_Ui_BFu17i) C1{ Fs:9 Fi Fi:17}



static void Test_BFu9s_Ui_BFu17i()
{
  {
    init_simple_test("BFu9s_Ui_BFu17i");
    static STRUCT_IF_C BFu9s_Ui_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_Ui_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu17i");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu9s_Ui_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu9s_Ui_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu17i, BFu9s_Ui_BFu17i)
//============================================================================


struct  BFu9s_Ui_BFu17ll  {
  unsigned short v1:9;
  unsigned int v2;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_Ui_BFu17ll) C1{ Fs:9 Fi FL:17}



static void Test_BFu9s_Ui_BFu17ll()
{
  {
    init_simple_test("BFu9s_Ui_BFu17ll");
    static STRUCT_IF_C BFu9s_Ui_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_Ui_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ui_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu9s_Ui_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu9s_Ui_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu17ll, BFu9s_Ui_BFu17ll)
//============================================================================


struct  BFu9s_Ui_BFu1c  {
  unsigned short v1:9;
  unsigned int v2;
  unsigned char v3:1;
};
//SIG(1 BFu9s_Ui_BFu1c) C1{ Fs:9 Fi Fc:1}



static void Test_BFu9s_Ui_BFu1c()
{
  {
    init_simple_test("BFu9s_Ui_BFu1c");
    static STRUCT_IF_C BFu9s_Ui_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_Ui_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu1c");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu9s_Ui_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu1c, BFu9s_Ui_BFu1c)
//============================================================================


struct  BFu9s_Ui_BFu1i  {
  unsigned short v1:9;
  unsigned int v2;
  unsigned int v3:1;
};
//SIG(1 BFu9s_Ui_BFu1i) C1{ Fs:9 Fi Fi:1}



static void Test_BFu9s_Ui_BFu1i()
{
  {
    init_simple_test("BFu9s_Ui_BFu1i");
    static STRUCT_IF_C BFu9s_Ui_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_Ui_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu1i");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu9s_Ui_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu1i, BFu9s_Ui_BFu1i)
//============================================================================


struct  BFu9s_Ui_BFu1ll  {
  unsigned short v1:9;
  unsigned int v2;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_Ui_BFu1ll) C1{ Fs:9 Fi FL:1}



static void Test_BFu9s_Ui_BFu1ll()
{
  {
    init_simple_test("BFu9s_Ui_BFu1ll");
    static STRUCT_IF_C BFu9s_Ui_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_Ui_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ui_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu9s_Ui_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu1ll, BFu9s_Ui_BFu1ll)
//============================================================================


struct  BFu9s_Ui_BFu1s  {
  unsigned short v1:9;
  unsigned int v2;
  unsigned short v3:1;
};
//SIG(1 BFu9s_Ui_BFu1s) C1{ Fs:9 Fi Fs:1}



static void Test_BFu9s_Ui_BFu1s()
{
  {
    init_simple_test("BFu9s_Ui_BFu1s");
    static STRUCT_IF_C BFu9s_Ui_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_Ui_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu1s");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu9s_Ui_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu1s, BFu9s_Ui_BFu1s)
//============================================================================


struct  BFu9s_Ui_BFu31i  {
  unsigned short v1:9;
  unsigned int v2;
  unsigned int v3:31;
};
//SIG(1 BFu9s_Ui_BFu31i) C1{ Fs:9 Fi Fi:31}



static void Test_BFu9s_Ui_BFu31i()
{
  {
    init_simple_test("BFu9s_Ui_BFu31i");
    static STRUCT_IF_C BFu9s_Ui_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_Ui_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu31i");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu9s_Ui_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu9s_Ui_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu31i, BFu9s_Ui_BFu31i)
//============================================================================


struct  BFu9s_Ui_BFu31ll  {
  unsigned short v1:9;
  unsigned int v2;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_Ui_BFu31ll) C1{ Fs:9 Fi FL:31}



static void Test_BFu9s_Ui_BFu31ll()
{
  {
    init_simple_test("BFu9s_Ui_BFu31ll");
    static STRUCT_IF_C BFu9s_Ui_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_Ui_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ui_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu9s_Ui_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu9s_Ui_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu31ll, BFu9s_Ui_BFu31ll)
//============================================================================


struct  BFu9s_Ui_BFu32i  {
  unsigned short v1:9;
  unsigned int v2;
  unsigned int v3:32;
};
//SIG(1 BFu9s_Ui_BFu32i) C1{ Fs:9 Fi Fi:32}



static void Test_BFu9s_Ui_BFu32i()
{
  {
    init_simple_test("BFu9s_Ui_BFu32i");
    static STRUCT_IF_C BFu9s_Ui_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_Ui_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu32i");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu9s_Ui_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu9s_Ui_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu32i, BFu9s_Ui_BFu32i)
//============================================================================


struct  BFu9s_Ui_BFu32ll  {
  unsigned short v1:9;
  unsigned int v2;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_Ui_BFu32ll) C1{ Fs:9 Fi FL:32}



static void Test_BFu9s_Ui_BFu32ll()
{
  {
    init_simple_test("BFu9s_Ui_BFu32ll");
    static STRUCT_IF_C BFu9s_Ui_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_Ui_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ui_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu9s_Ui_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu9s_Ui_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu32ll, BFu9s_Ui_BFu32ll)
//============================================================================


struct  BFu9s_Ui_BFu33  {
  unsigned short v1:9;
  unsigned int v2;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_Ui_BFu33) C1{ Fs:9 Fi FL:33}



static void Test_BFu9s_Ui_BFu33()
{
  {
    init_simple_test("BFu9s_Ui_BFu33");
    static STRUCT_IF_C BFu9s_Ui_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu9s_Ui_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ui_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu33");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu9s_Ui_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu9s_Ui_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu33, BFu9s_Ui_BFu33)
//============================================================================


struct  BFu9s_Ui_BFu7c  {
  unsigned short v1:9;
  unsigned int v2;
  unsigned char v3:7;
};
//SIG(1 BFu9s_Ui_BFu7c) C1{ Fs:9 Fi Fc:7}



static void Test_BFu9s_Ui_BFu7c()
{
  {
    init_simple_test("BFu9s_Ui_BFu7c");
    static STRUCT_IF_C BFu9s_Ui_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_Ui_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu7c");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu9s_Ui_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu9s_Ui_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu7c, BFu9s_Ui_BFu7c)
//============================================================================


struct  BFu9s_Ui_BFu7i  {
  unsigned short v1:9;
  unsigned int v2;
  unsigned int v3:7;
};
//SIG(1 BFu9s_Ui_BFu7i) C1{ Fs:9 Fi Fi:7}



static void Test_BFu9s_Ui_BFu7i()
{
  {
    init_simple_test("BFu9s_Ui_BFu7i");
    static STRUCT_IF_C BFu9s_Ui_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_Ui_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu7i");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu9s_Ui_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu9s_Ui_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu7i, BFu9s_Ui_BFu7i)
//============================================================================


struct  BFu9s_Ui_BFu7ll  {
  unsigned short v1:9;
  unsigned int v2;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_Ui_BFu7ll) C1{ Fs:9 Fi FL:7}



static void Test_BFu9s_Ui_BFu7ll()
{
  {
    init_simple_test("BFu9s_Ui_BFu7ll");
    static STRUCT_IF_C BFu9s_Ui_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_Ui_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ui_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu9s_Ui_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu9s_Ui_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu7ll, BFu9s_Ui_BFu7ll)
//============================================================================


struct  BFu9s_Ui_BFu7s  {
  unsigned short v1:9;
  unsigned int v2;
  unsigned short v3:7;
};
//SIG(1 BFu9s_Ui_BFu7s) C1{ Fs:9 Fi Fs:7}



static void Test_BFu9s_Ui_BFu7s()
{
  {
    init_simple_test("BFu9s_Ui_BFu7s");
    static STRUCT_IF_C BFu9s_Ui_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_Ui_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu7s");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu9s_Ui_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu9s_Ui_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu7s, BFu9s_Ui_BFu7s)
//============================================================================


struct  BFu9s_Ui_BFu8c  {
  unsigned short v1:9;
  unsigned int v2;
  unsigned char v3:8;
};
//SIG(1 BFu9s_Ui_BFu8c) C1{ Fs:9 Fi Fc:8}



static void Test_BFu9s_Ui_BFu8c()
{
  {
    init_simple_test("BFu9s_Ui_BFu8c");
    static STRUCT_IF_C BFu9s_Ui_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_Ui_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu8c");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu9s_Ui_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu9s_Ui_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu8c, BFu9s_Ui_BFu8c)
//============================================================================


struct  BFu9s_Ui_BFu8i  {
  unsigned short v1:9;
  unsigned int v2;
  unsigned int v3:8;
};
//SIG(1 BFu9s_Ui_BFu8i) C1{ Fs:9 Fi Fi:8}



static void Test_BFu9s_Ui_BFu8i()
{
  {
    init_simple_test("BFu9s_Ui_BFu8i");
    static STRUCT_IF_C BFu9s_Ui_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_Ui_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu8i");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu9s_Ui_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu9s_Ui_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu8i, BFu9s_Ui_BFu8i)
//============================================================================


struct  BFu9s_Ui_BFu8ll  {
  unsigned short v1:9;
  unsigned int v2;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_Ui_BFu8ll) C1{ Fs:9 Fi FL:8}



static void Test_BFu9s_Ui_BFu8ll()
{
  {
    init_simple_test("BFu9s_Ui_BFu8ll");
    static STRUCT_IF_C BFu9s_Ui_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_Ui_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ui_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu9s_Ui_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu9s_Ui_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu8ll, BFu9s_Ui_BFu8ll)
//============================================================================


struct  BFu9s_Ui_BFu8s  {
  unsigned short v1:9;
  unsigned int v2;
  unsigned short v3:8;
};
//SIG(1 BFu9s_Ui_BFu8s) C1{ Fs:9 Fi Fs:8}



static void Test_BFu9s_Ui_BFu8s()
{
  {
    init_simple_test("BFu9s_Ui_BFu8s");
    static STRUCT_IF_C BFu9s_Ui_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_Ui_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu8s");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu9s_Ui_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu9s_Ui_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu8s, BFu9s_Ui_BFu8s)
//============================================================================


struct  BFu9s_Ui_BFu9i  {
  unsigned short v1:9;
  unsigned int v2;
  unsigned int v3:9;
};
//SIG(1 BFu9s_Ui_BFu9i) C1{ Fs:9 Fi Fi:9}



static void Test_BFu9s_Ui_BFu9i()
{
  {
    init_simple_test("BFu9s_Ui_BFu9i");
    static STRUCT_IF_C BFu9s_Ui_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_Ui_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu9i");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu9s_Ui_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu9i, BFu9s_Ui_BFu9i)
//============================================================================


struct  BFu9s_Ui_BFu9ll  {
  unsigned short v1:9;
  unsigned int v2;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_Ui_BFu9ll) C1{ Fs:9 Fi FL:9}



static void Test_BFu9s_Ui_BFu9ll()
{
  {
    init_simple_test("BFu9s_Ui_BFu9ll");
    static STRUCT_IF_C BFu9s_Ui_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_Ui_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ui_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu9s_Ui_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu9ll, BFu9s_Ui_BFu9ll)
//============================================================================


struct  BFu9s_Ui_BFu9s  {
  unsigned short v1:9;
  unsigned int v2;
  unsigned short v3:9;
};
//SIG(1 BFu9s_Ui_BFu9s) C1{ Fs:9 Fi Fs:9}



static void Test_BFu9s_Ui_BFu9s()
{
  {
    init_simple_test("BFu9s_Ui_BFu9s");
    static STRUCT_IF_C BFu9s_Ui_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_Ui_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu9s");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu9s_Ui_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu9s, BFu9s_Ui_BFu9s)
//============================================================================


struct  BFu9s_Ui_C  {
  unsigned short v1:9;
  unsigned int v2;
  char v3;
};
//SIG(1 BFu9s_Ui_C) C1{ Fs:9 Fi Fc}



static void Test_BFu9s_Ui_C()
{
  {
    init_simple_test("BFu9s_Ui_C");
    static STRUCT_IF_C BFu9s_Ui_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_Ui_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_C");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_C.v2");
    check_field_offset(lv, v3, 8, "BFu9s_Ui_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_C, BFu9s_Ui_C)
//============================================================================


struct  BFu9s_Ui_D  {
  unsigned short v1:9;
  unsigned int v2;
  double v3;
};
//SIG(1 BFu9s_Ui_D) C1{ Fs:9 Fi FL}



static void Test_BFu9s_Ui_D()
{
  {
    init_simple_test("BFu9s_Ui_D");
    static STRUCT_IF_C BFu9s_Ui_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu9s_Ui_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ui_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_D");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_D.v2");
    check_field_offset(lv, v3, 8, "BFu9s_Ui_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_D, BFu9s_Ui_D)
//============================================================================


struct  BFu9s_Ui_F  {
  unsigned short v1:9;
  unsigned int v2;
  float v3;
};
//SIG(1 BFu9s_Ui_F) C1{ Fs:9 Fi[2]}



static void Test_BFu9s_Ui_F()
{
  {
    init_simple_test("BFu9s_Ui_F");
    static STRUCT_IF_C BFu9s_Ui_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_Ui_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_F");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_F.v2");
    check_field_offset(lv, v3, 8, "BFu9s_Ui_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_F, BFu9s_Ui_F)
//============================================================================


struct  BFu9s_Ui_I  {
  unsigned short v1:9;
  unsigned int v2;
  int v3;
};
//SIG(1 BFu9s_Ui_I) C1{ Fs:9 Fi[2]}



static void Test_BFu9s_Ui_I()
{
  {
    init_simple_test("BFu9s_Ui_I");
    static STRUCT_IF_C BFu9s_Ui_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_Ui_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_I");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_I.v2");
    check_field_offset(lv, v3, 8, "BFu9s_Ui_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_I, BFu9s_Ui_I)
//============================================================================


struct  BFu9s_Ui_Ip  {
  unsigned short v1:9;
  unsigned int v2;
  int *v3;
};
//SIG(1 BFu9s_Ui_Ip) C1{ Fs:9 Fi Fp}



static void Test_BFu9s_Ui_Ip()
{
  {
    init_simple_test("BFu9s_Ui_Ip");
    static STRUCT_IF_C BFu9s_Ui_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_Ui_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ui_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_Ip");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu9s_Ui_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_Ip, BFu9s_Ui_Ip)
//============================================================================


struct  BFu9s_Ui_L  {
  unsigned short v1:9;
  unsigned int v2;
  __tsi64 v3;
};
//SIG(1 BFu9s_Ui_L) C1{ Fs:9 Fi FL}



static void Test_BFu9s_Ui_L()
{
  {
    init_simple_test("BFu9s_Ui_L");
    static STRUCT_IF_C BFu9s_Ui_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu9s_Ui_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ui_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_L");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_L.v2");
    check_field_offset(lv, v3, 8, "BFu9s_Ui_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_L, BFu9s_Ui_L)
//============================================================================


struct  BFu9s_Ui_S  {
  unsigned short v1:9;
  unsigned int v2;
  short v3;
};
//SIG(1 BFu9s_Ui_S) C1{ Fs:9 Fi Fs}



static void Test_BFu9s_Ui_S()
{
  {
    init_simple_test("BFu9s_Ui_S");
    static STRUCT_IF_C BFu9s_Ui_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_Ui_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_S");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_S.v2");
    check_field_offset(lv, v3, 8, "BFu9s_Ui_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_S, BFu9s_Ui_S)
//============================================================================


struct  BFu9s_Ui_Uc  {
  unsigned short v1:9;
  unsigned int v2;
  unsigned char v3;
};
//SIG(1 BFu9s_Ui_Uc) C1{ Fs:9 Fi Fc}



static void Test_BFu9s_Ui_Uc()
{
  {
    init_simple_test("BFu9s_Ui_Uc");
    static STRUCT_IF_C BFu9s_Ui_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_Ui_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_Uc");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu9s_Ui_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_Uc, BFu9s_Ui_Uc)
//============================================================================


struct  BFu9s_Ui_Ui  {
  unsigned short v1:9;
  unsigned int v2;
  unsigned int v3;
};
//SIG(1 BFu9s_Ui_Ui) C1{ Fs:9 Fi[2]}



static void Test_BFu9s_Ui_Ui()
{
  {
    init_simple_test("BFu9s_Ui_Ui");
    static STRUCT_IF_C BFu9s_Ui_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_Ui_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_Ui");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu9s_Ui_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_Ui, BFu9s_Ui_Ui)
//============================================================================


struct  BFu9s_Ui_Ul  {
  unsigned short v1:9;
  unsigned int v2;
  __tsu64 v3;
};
//SIG(1 BFu9s_Ui_Ul) C1{ Fs:9 Fi FL}



static void Test_BFu9s_Ui_Ul()
{
  {
    init_simple_test("BFu9s_Ui_Ul");
    static STRUCT_IF_C BFu9s_Ui_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu9s_Ui_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ui_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_Ul");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu9s_Ui_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_Ul, BFu9s_Ui_Ul)
//============================================================================


struct  BFu9s_Ui_Us  {
  unsigned short v1:9;
  unsigned int v2;
  unsigned short v3;
};
//SIG(1 BFu9s_Ui_Us) C1{ Fs:9 Fi Fs}



static void Test_BFu9s_Ui_Us()
{
  {
    init_simple_test("BFu9s_Ui_Us");
    static STRUCT_IF_C BFu9s_Ui_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu9s_Ui_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_Us");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_Us.v2");
    check_field_offset(lv, v3, 8, "BFu9s_Ui_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_Us, BFu9s_Ui_Us)
//============================================================================


struct  BFu9s_Ui_Vp  {
  unsigned short v1:9;
  unsigned int v2;
  void *v3;
};
//SIG(1 BFu9s_Ui_Vp) C1{ Fs:9 Fi Fp}



static void Test_BFu9s_Ui_Vp()
{
  {
    init_simple_test("BFu9s_Ui_Vp");
    static STRUCT_IF_C BFu9s_Ui_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_Ui_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ui_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_Vp");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu9s_Ui_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_Vp, BFu9s_Ui_Vp)
//============================================================================


struct  BFu9s_Ul  {
  unsigned short v1:9;
  __tsu64 v2;
};
//SIG(1 BFu9s_Ul) C1{ Fs:9 FL}



static void Test_BFu9s_Ul()
{
  {
    init_simple_test("BFu9s_Ul");
    static STRUCT_IF_C BFu9s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul, BFu9s_Ul)
//============================================================================


struct  BFu9s_Ul_BFu15i  {
  unsigned short v1:9;
  __tsu64 v2;
  unsigned int v3:15;
};
//SIG(1 BFu9s_Ul_BFu15i) C1{ Fs:9 FL Fi:15}



static void Test_BFu9s_Ul_BFu15i()
{
  {
    init_simple_test("BFu9s_Ul_BFu15i");
    static STRUCT_IF_C BFu9s_Ul_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu9s_Ul_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu9s_Ul_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu15i, BFu9s_Ul_BFu15i)
//============================================================================


struct  BFu9s_Ul_BFu15ll  {
  unsigned short v1:9;
  __tsu64 v2;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_Ul_BFu15ll) C1{ Fs:9 FL FL:15}



static void Test_BFu9s_Ul_BFu15ll()
{
  {
    init_simple_test("BFu9s_Ul_BFu15ll");
    static STRUCT_IF_C BFu9s_Ul_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu9s_Ul_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu9s_Ul_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu15ll, BFu9s_Ul_BFu15ll)
//============================================================================


struct  BFu9s_Ul_BFu15s  {
  unsigned short v1:9;
  __tsu64 v2;
  unsigned short v3:15;
};
//SIG(1 BFu9s_Ul_BFu15s) C1{ Fs:9 FL Fs:15}



static void Test_BFu9s_Ul_BFu15s()
{
  {
    init_simple_test("BFu9s_Ul_BFu15s");
    static STRUCT_IF_C BFu9s_Ul_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu9s_Ul_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu9s_Ul_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu15s, BFu9s_Ul_BFu15s)
//============================================================================


struct  BFu9s_Ul_BFu16i  {
  unsigned short v1:9;
  __tsu64 v2;
  unsigned int v3:16;
};
//SIG(1 BFu9s_Ul_BFu16i) C1{ Fs:9 FL Fi:16}



static void Test_BFu9s_Ul_BFu16i()
{
  {
    init_simple_test("BFu9s_Ul_BFu16i");
    static STRUCT_IF_C BFu9s_Ul_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu9s_Ul_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu9s_Ul_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu16i, BFu9s_Ul_BFu16i)
//============================================================================


struct  BFu9s_Ul_BFu16ll  {
  unsigned short v1:9;
  __tsu64 v2;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_Ul_BFu16ll) C1{ Fs:9 FL FL:16}



static void Test_BFu9s_Ul_BFu16ll()
{
  {
    init_simple_test("BFu9s_Ul_BFu16ll");
    static STRUCT_IF_C BFu9s_Ul_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu9s_Ul_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu9s_Ul_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu16ll, BFu9s_Ul_BFu16ll)
//============================================================================


struct  BFu9s_Ul_BFu16s  {
  unsigned short v1:9;
  __tsu64 v2;
  unsigned short v3:16;
};
//SIG(1 BFu9s_Ul_BFu16s) C1{ Fs:9 FL Fs:16}



static void Test_BFu9s_Ul_BFu16s()
{
  {
    init_simple_test("BFu9s_Ul_BFu16s");
    static STRUCT_IF_C BFu9s_Ul_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu9s_Ul_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu9s_Ul_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu16s, BFu9s_Ul_BFu16s)
//============================================================================


struct  BFu9s_Ul_BFu17i  {
  unsigned short v1:9;
  __tsu64 v2;
  unsigned int v3:17;
};
//SIG(1 BFu9s_Ul_BFu17i) C1{ Fs:9 FL Fi:17}



static void Test_BFu9s_Ul_BFu17i()
{
  {
    init_simple_test("BFu9s_Ul_BFu17i");
    static STRUCT_IF_C BFu9s_Ul_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu9s_Ul_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu9s_Ul_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu17i, BFu9s_Ul_BFu17i)
//============================================================================


struct  BFu9s_Ul_BFu17ll  {
  unsigned short v1:9;
  __tsu64 v2;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_Ul_BFu17ll) C1{ Fs:9 FL FL:17}



static void Test_BFu9s_Ul_BFu17ll()
{
  {
    init_simple_test("BFu9s_Ul_BFu17ll");
    static STRUCT_IF_C BFu9s_Ul_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu9s_Ul_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu9s_Ul_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu17ll, BFu9s_Ul_BFu17ll)
//============================================================================


struct  BFu9s_Ul_BFu1c  {
  unsigned short v1:9;
  __tsu64 v2;
  unsigned char v3:1;
};
//SIG(1 BFu9s_Ul_BFu1c) C1{ Fs:9 FL Fc:1}



static void Test_BFu9s_Ul_BFu1c()
{
  {
    init_simple_test("BFu9s_Ul_BFu1c");
    static STRUCT_IF_C BFu9s_Ul_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu9s_Ul_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu1c, BFu9s_Ul_BFu1c)
//============================================================================


struct  BFu9s_Ul_BFu1i  {
  unsigned short v1:9;
  __tsu64 v2;
  unsigned int v3:1;
};
//SIG(1 BFu9s_Ul_BFu1i) C1{ Fs:9 FL Fi:1}



static void Test_BFu9s_Ul_BFu1i()
{
  {
    init_simple_test("BFu9s_Ul_BFu1i");
    static STRUCT_IF_C BFu9s_Ul_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu9s_Ul_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu1i, BFu9s_Ul_BFu1i)
//============================================================================


struct  BFu9s_Ul_BFu1ll  {
  unsigned short v1:9;
  __tsu64 v2;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_Ul_BFu1ll) C1{ Fs:9 FL FL:1}



static void Test_BFu9s_Ul_BFu1ll()
{
  {
    init_simple_test("BFu9s_Ul_BFu1ll");
    static STRUCT_IF_C BFu9s_Ul_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu9s_Ul_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu1ll, BFu9s_Ul_BFu1ll)
//============================================================================


struct  BFu9s_Ul_BFu1s  {
  unsigned short v1:9;
  __tsu64 v2;
  unsigned short v3:1;
};
//SIG(1 BFu9s_Ul_BFu1s) C1{ Fs:9 FL Fs:1}



static void Test_BFu9s_Ul_BFu1s()
{
  {
    init_simple_test("BFu9s_Ul_BFu1s");
    static STRUCT_IF_C BFu9s_Ul_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu9s_Ul_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu1s, BFu9s_Ul_BFu1s)
//============================================================================


struct  BFu9s_Ul_BFu31i  {
  unsigned short v1:9;
  __tsu64 v2;
  unsigned int v3:31;
};
//SIG(1 BFu9s_Ul_BFu31i) C1{ Fs:9 FL Fi:31}



static void Test_BFu9s_Ul_BFu31i()
{
  {
    init_simple_test("BFu9s_Ul_BFu31i");
    static STRUCT_IF_C BFu9s_Ul_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu9s_Ul_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu9s_Ul_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu31i, BFu9s_Ul_BFu31i)
//============================================================================


struct  BFu9s_Ul_BFu31ll  {
  unsigned short v1:9;
  __tsu64 v2;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_Ul_BFu31ll) C1{ Fs:9 FL FL:31}



static void Test_BFu9s_Ul_BFu31ll()
{
  {
    init_simple_test("BFu9s_Ul_BFu31ll");
    static STRUCT_IF_C BFu9s_Ul_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu9s_Ul_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu9s_Ul_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu31ll, BFu9s_Ul_BFu31ll)
//============================================================================


struct  BFu9s_Ul_BFu32i  {
  unsigned short v1:9;
  __tsu64 v2;
  unsigned int v3:32;
};
//SIG(1 BFu9s_Ul_BFu32i) C1{ Fs:9 FL Fi:32}



static void Test_BFu9s_Ul_BFu32i()
{
  {
    init_simple_test("BFu9s_Ul_BFu32i");
    static STRUCT_IF_C BFu9s_Ul_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu9s_Ul_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu9s_Ul_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu32i, BFu9s_Ul_BFu32i)
//============================================================================


struct  BFu9s_Ul_BFu32ll  {
  unsigned short v1:9;
  __tsu64 v2;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_Ul_BFu32ll) C1{ Fs:9 FL FL:32}



static void Test_BFu9s_Ul_BFu32ll()
{
  {
    init_simple_test("BFu9s_Ul_BFu32ll");
    static STRUCT_IF_C BFu9s_Ul_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu9s_Ul_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu9s_Ul_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu32ll, BFu9s_Ul_BFu32ll)
//============================================================================


struct  BFu9s_Ul_BFu33  {
  unsigned short v1:9;
  __tsu64 v2;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_Ul_BFu33) C1{ Fs:9 FL FL:33}



static void Test_BFu9s_Ul_BFu33()
{
  {
    init_simple_test("BFu9s_Ul_BFu33");
    static STRUCT_IF_C BFu9s_Ul_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu9s_Ul_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu9s_Ul_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu9s_Ul_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu33, BFu9s_Ul_BFu33)
//============================================================================


struct  BFu9s_Ul_BFu7c  {
  unsigned short v1:9;
  __tsu64 v2;
  unsigned char v3:7;
};
//SIG(1 BFu9s_Ul_BFu7c) C1{ Fs:9 FL Fc:7}



static void Test_BFu9s_Ul_BFu7c()
{
  {
    init_simple_test("BFu9s_Ul_BFu7c");
    static STRUCT_IF_C BFu9s_Ul_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu9s_Ul_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu9s_Ul_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu7c, BFu9s_Ul_BFu7c)
//============================================================================


struct  BFu9s_Ul_BFu7i  {
  unsigned short v1:9;
  __tsu64 v2;
  unsigned int v3:7;
};
//SIG(1 BFu9s_Ul_BFu7i) C1{ Fs:9 FL Fi:7}



static void Test_BFu9s_Ul_BFu7i()
{
  {
    init_simple_test("BFu9s_Ul_BFu7i");
    static STRUCT_IF_C BFu9s_Ul_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu9s_Ul_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu9s_Ul_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu7i, BFu9s_Ul_BFu7i)
//============================================================================


struct  BFu9s_Ul_BFu7ll  {
  unsigned short v1:9;
  __tsu64 v2;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_Ul_BFu7ll) C1{ Fs:9 FL FL:7}



static void Test_BFu9s_Ul_BFu7ll()
{
  {
    init_simple_test("BFu9s_Ul_BFu7ll");
    static STRUCT_IF_C BFu9s_Ul_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu9s_Ul_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu9s_Ul_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu7ll, BFu9s_Ul_BFu7ll)
//============================================================================


struct  BFu9s_Ul_BFu7s  {
  unsigned short v1:9;
  __tsu64 v2;
  unsigned short v3:7;
};
//SIG(1 BFu9s_Ul_BFu7s) C1{ Fs:9 FL Fs:7}



static void Test_BFu9s_Ul_BFu7s()
{
  {
    init_simple_test("BFu9s_Ul_BFu7s");
    static STRUCT_IF_C BFu9s_Ul_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu9s_Ul_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu9s_Ul_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu7s, BFu9s_Ul_BFu7s)
//============================================================================


struct  BFu9s_Ul_BFu8c  {
  unsigned short v1:9;
  __tsu64 v2;
  unsigned char v3:8;
};
//SIG(1 BFu9s_Ul_BFu8c) C1{ Fs:9 FL Fc:8}



static void Test_BFu9s_Ul_BFu8c()
{
  {
    init_simple_test("BFu9s_Ul_BFu8c");
    static STRUCT_IF_C BFu9s_Ul_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu9s_Ul_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu9s_Ul_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu8c, BFu9s_Ul_BFu8c)
//============================================================================


struct  BFu9s_Ul_BFu8i  {
  unsigned short v1:9;
  __tsu64 v2;
  unsigned int v3:8;
};
//SIG(1 BFu9s_Ul_BFu8i) C1{ Fs:9 FL Fi:8}



static void Test_BFu9s_Ul_BFu8i()
{
  {
    init_simple_test("BFu9s_Ul_BFu8i");
    static STRUCT_IF_C BFu9s_Ul_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu9s_Ul_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu9s_Ul_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu8i, BFu9s_Ul_BFu8i)
//============================================================================


struct  BFu9s_Ul_BFu8ll  {
  unsigned short v1:9;
  __tsu64 v2;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_Ul_BFu8ll) C1{ Fs:9 FL FL:8}



static void Test_BFu9s_Ul_BFu8ll()
{
  {
    init_simple_test("BFu9s_Ul_BFu8ll");
    static STRUCT_IF_C BFu9s_Ul_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu9s_Ul_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu9s_Ul_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu8ll, BFu9s_Ul_BFu8ll)
//============================================================================


struct  BFu9s_Ul_BFu8s  {
  unsigned short v1:9;
  __tsu64 v2;
  unsigned short v3:8;
};
//SIG(1 BFu9s_Ul_BFu8s) C1{ Fs:9 FL Fs:8}



static void Test_BFu9s_Ul_BFu8s()
{
  {
    init_simple_test("BFu9s_Ul_BFu8s");
    static STRUCT_IF_C BFu9s_Ul_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu9s_Ul_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu9s_Ul_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu8s, BFu9s_Ul_BFu8s)
//============================================================================


struct  BFu9s_Ul_BFu9i  {
  unsigned short v1:9;
  __tsu64 v2;
  unsigned int v3:9;
};
//SIG(1 BFu9s_Ul_BFu9i) C1{ Fs:9 FL Fi:9}



static void Test_BFu9s_Ul_BFu9i()
{
  {
    init_simple_test("BFu9s_Ul_BFu9i");
    static STRUCT_IF_C BFu9s_Ul_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu9s_Ul_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu9i, BFu9s_Ul_BFu9i)
//============================================================================


struct  BFu9s_Ul_BFu9ll  {
  unsigned short v1:9;
  __tsu64 v2;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_Ul_BFu9ll) C1{ Fs:9 FL FL:9}



static void Test_BFu9s_Ul_BFu9ll()
{
  {
    init_simple_test("BFu9s_Ul_BFu9ll");
    static STRUCT_IF_C BFu9s_Ul_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu9s_Ul_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu9ll, BFu9s_Ul_BFu9ll)
//============================================================================


struct  BFu9s_Ul_BFu9s  {
  unsigned short v1:9;
  __tsu64 v2;
  unsigned short v3:9;
};
//SIG(1 BFu9s_Ul_BFu9s) C1{ Fs:9 FL Fs:9}



static void Test_BFu9s_Ul_BFu9s()
{
  {
    init_simple_test("BFu9s_Ul_BFu9s");
    static STRUCT_IF_C BFu9s_Ul_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu9s_Ul_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu9s, BFu9s_Ul_BFu9s)
//============================================================================


struct  BFu9s_Ul_C  {
  unsigned short v1:9;
  __tsu64 v2;
  char v3;
};
//SIG(1 BFu9s_Ul_C) C1{ Fs:9 FL Fc}



static void Test_BFu9s_Ul_C()
{
  {
    init_simple_test("BFu9s_Ul_C");
    static STRUCT_IF_C BFu9s_Ul_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_Ul_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_C, BFu9s_Ul_C)
//============================================================================


struct  BFu9s_Ul_D  {
  unsigned short v1:9;
  __tsu64 v2;
  double v3;
};
//SIG(1 BFu9s_Ul_D) C1{ Fs:9 FL[2]}



static void Test_BFu9s_Ul_D()
{
  {
    init_simple_test("BFu9s_Ul_D");
    static STRUCT_IF_C BFu9s_Ul_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu9s_Ul_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_Ul_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_D, BFu9s_Ul_D)
//============================================================================


struct  BFu9s_Ul_F  {
  unsigned short v1:9;
  __tsu64 v2;
  float v3;
};
//SIG(1 BFu9s_Ul_F) C1{ Fs:9 FL Fi}



static void Test_BFu9s_Ul_F()
{
  {
    init_simple_test("BFu9s_Ul_F");
    static STRUCT_IF_C BFu9s_Ul_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_Ul_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_F, BFu9s_Ul_F)
//============================================================================


struct  BFu9s_Ul_I  {
  unsigned short v1:9;
  __tsu64 v2;
  int v3;
};
//SIG(1 BFu9s_Ul_I) C1{ Fs:9 FL Fi}



static void Test_BFu9s_Ul_I()
{
  {
    init_simple_test("BFu9s_Ul_I");
    static STRUCT_IF_C BFu9s_Ul_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_Ul_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_I, BFu9s_Ul_I)
//============================================================================


struct  BFu9s_Ul_Ip  {
  unsigned short v1:9;
  __tsu64 v2;
  int *v3;
};
//SIG(1 BFu9s_Ul_Ip) C1{ Fs:9 FL Fp}



static void Test_BFu9s_Ul_Ip()
{
  {
    init_simple_test("BFu9s_Ul_Ip");
    static STRUCT_IF_C BFu9s_Ul_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_Ul_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_Ip, BFu9s_Ul_Ip)
//============================================================================


struct  BFu9s_Ul_L  {
  unsigned short v1:9;
  __tsu64 v2;
  __tsi64 v3;
};
//SIG(1 BFu9s_Ul_L) C1{ Fs:9 FL[2]}



static void Test_BFu9s_Ul_L()
{
  {
    init_simple_test("BFu9s_Ul_L");
    static STRUCT_IF_C BFu9s_Ul_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu9s_Ul_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_Ul_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_L, BFu9s_Ul_L)
//============================================================================


struct  BFu9s_Ul_S  {
  unsigned short v1:9;
  __tsu64 v2;
  short v3;
};
//SIG(1 BFu9s_Ul_S) C1{ Fs:9 FL Fs}



static void Test_BFu9s_Ul_S()
{
  {
    init_simple_test("BFu9s_Ul_S");
    static STRUCT_IF_C BFu9s_Ul_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_Ul_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_S, BFu9s_Ul_S)
//============================================================================


struct  BFu9s_Ul_Uc  {
  unsigned short v1:9;
  __tsu64 v2;
  unsigned char v3;
};
//SIG(1 BFu9s_Ul_Uc) C1{ Fs:9 FL Fc}



static void Test_BFu9s_Ul_Uc()
{
  {
    init_simple_test("BFu9s_Ul_Uc");
    static STRUCT_IF_C BFu9s_Ul_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_Ul_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_Uc, BFu9s_Ul_Uc)
//============================================================================


struct  BFu9s_Ul_Ui  {
  unsigned short v1:9;
  __tsu64 v2;
  unsigned int v3;
};
//SIG(1 BFu9s_Ul_Ui) C1{ Fs:9 FL Fi}



static void Test_BFu9s_Ul_Ui()
{
  {
    init_simple_test("BFu9s_Ul_Ui");
    static STRUCT_IF_C BFu9s_Ul_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_Ul_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_Ui, BFu9s_Ul_Ui)
//============================================================================


struct  BFu9s_Ul_Ul  {
  unsigned short v1:9;
  __tsu64 v2;
  __tsu64 v3;
};
//SIG(1 BFu9s_Ul_Ul) C1{ Fs:9 FL[2]}



static void Test_BFu9s_Ul_Ul()
{
  {
    init_simple_test("BFu9s_Ul_Ul");
    static STRUCT_IF_C BFu9s_Ul_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu9s_Ul_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_Ul_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_Ul, BFu9s_Ul_Ul)
//============================================================================


struct  BFu9s_Ul_Us  {
  unsigned short v1:9;
  __tsu64 v2;
  unsigned short v3;
};
//SIG(1 BFu9s_Ul_Us) C1{ Fs:9 FL Fs}



static void Test_BFu9s_Ul_Us()
{
  {
    init_simple_test("BFu9s_Ul_Us");
    static STRUCT_IF_C BFu9s_Ul_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_Ul_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_Us, BFu9s_Ul_Us)
//============================================================================


struct  BFu9s_Ul_Vp  {
  unsigned short v1:9;
  __tsu64 v2;
  void *v3;
};
//SIG(1 BFu9s_Ul_Vp) C1{ Fs:9 FL Fp}



static void Test_BFu9s_Ul_Vp()
{
  {
    init_simple_test("BFu9s_Ul_Vp");
    static STRUCT_IF_C BFu9s_Ul_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Ul_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu9s_Ul_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_Vp, BFu9s_Ul_Vp)
//============================================================================


struct  BFu9s_Us  {
  unsigned short v1:9;
  unsigned short v2;
};
//SIG(1 BFu9s_Us) C1{ Fs:9 Fs}



static void Test_BFu9s_Us()
{
  {
    init_simple_test("BFu9s_Us");
    static STRUCT_IF_C BFu9s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us");
    check_field_offset(lv, v2, 2, "BFu9s_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us, BFu9s_Us)
//============================================================================


struct  BFu9s_Us_BFu15i  {
  unsigned short v1:9;
  unsigned short v2;
  unsigned int v3:15;
};
//SIG(1 BFu9s_Us_BFu15i) C1{ Fs:9 Fs Fi:15}



static void Test_BFu9s_Us_BFu15i()
{
  {
    init_simple_test("BFu9s_Us_BFu15i");
    static STRUCT_IF_C BFu9s_Us_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Us_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Us_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu15i");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_Us_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_Us_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu15i, BFu9s_Us_BFu15i)
//============================================================================


struct  BFu9s_Us_BFu15ll  {
  unsigned short v1:9;
  unsigned short v2;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_Us_BFu15ll) C1{ Fs:9 Fs FL:15}



static void Test_BFu9s_Us_BFu15ll()
{
  {
    init_simple_test("BFu9s_Us_BFu15ll");
    static STRUCT_IF_C BFu9s_Us_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Us_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Us_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu15ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_Us_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_Us_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu15ll, BFu9s_Us_BFu15ll)
//============================================================================


struct  BFu9s_Us_BFu15s  {
  unsigned short v1:9;
  unsigned short v2;
  unsigned short v3:15;
};
//SIG(1 BFu9s_Us_BFu15s) C1{ Fs:9 Fs Fs:15}



static void Test_BFu9s_Us_BFu15s()
{
  {
    init_simple_test("BFu9s_Us_BFu15s");
    static STRUCT_IF_C BFu9s_Us_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_Us_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Us_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu15s");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu9s_Us_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_Us_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu15s, BFu9s_Us_BFu15s)
//============================================================================


struct  BFu9s_Us_BFu16i  {
  unsigned short v1:9;
  unsigned short v2;
  unsigned int v3:16;
};
//SIG(1 BFu9s_Us_BFu16i) C1{ Fs:9 Fs Fi:16}



static void Test_BFu9s_Us_BFu16i()
{
  {
    init_simple_test("BFu9s_Us_BFu16i");
    static STRUCT_IF_C BFu9s_Us_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Us_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Us_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu16i");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_Us_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_Us_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu16i, BFu9s_Us_BFu16i)
//============================================================================


struct  BFu9s_Us_BFu16ll  {
  unsigned short v1:9;
  unsigned short v2;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_Us_BFu16ll) C1{ Fs:9 Fs FL:16}



static void Test_BFu9s_Us_BFu16ll()
{
  {
    init_simple_test("BFu9s_Us_BFu16ll");
    static STRUCT_IF_C BFu9s_Us_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Us_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Us_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu16ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_Us_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_Us_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu16ll, BFu9s_Us_BFu16ll)
//============================================================================


struct  BFu9s_Us_BFu16s  {
  unsigned short v1:9;
  unsigned short v2;
  unsigned short v3:16;
};
//SIG(1 BFu9s_Us_BFu16s) C1{ Fs:9 Fs Fs:16}



static void Test_BFu9s_Us_BFu16s()
{
  {
    init_simple_test("BFu9s_Us_BFu16s");
    static STRUCT_IF_C BFu9s_Us_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_Us_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Us_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu16s");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu9s_Us_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_Us_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu16s, BFu9s_Us_BFu16s)
//============================================================================


struct  BFu9s_Us_BFu17i  {
  unsigned short v1:9;
  unsigned short v2;
  unsigned int v3:17;
};
//SIG(1 BFu9s_Us_BFu17i) C1{ Fs:9 Fs Fi:17}



static void Test_BFu9s_Us_BFu17i()
{
  {
    init_simple_test("BFu9s_Us_BFu17i");
    static STRUCT_IF_C BFu9s_Us_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Us_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Us_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu17i");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu9s_Us_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_Us_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu17i, BFu9s_Us_BFu17i)
//============================================================================


struct  BFu9s_Us_BFu17ll  {
  unsigned short v1:9;
  unsigned short v2;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_Us_BFu17ll) C1{ Fs:9 Fs FL:17}



static void Test_BFu9s_Us_BFu17ll()
{
  {
    init_simple_test("BFu9s_Us_BFu17ll");
    static STRUCT_IF_C BFu9s_Us_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Us_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Us_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu17ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu9s_Us_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_Us_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu17ll, BFu9s_Us_BFu17ll)
//============================================================================


struct  BFu9s_Us_BFu1c  {
  unsigned short v1:9;
  unsigned short v2;
  unsigned char v3:1;
};
//SIG(1 BFu9s_Us_BFu1c) C1{ Fs:9 Fs Fc:1}



static void Test_BFu9s_Us_BFu1c()
{
  {
    init_simple_test("BFu9s_Us_BFu1c");
    static STRUCT_IF_C BFu9s_Us_BFu1c lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_Us_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Us_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu1c");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu1c.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu9s_Us_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu1c, BFu9s_Us_BFu1c)
//============================================================================


struct  BFu9s_Us_BFu1i  {
  unsigned short v1:9;
  unsigned short v2;
  unsigned int v3:1;
};
//SIG(1 BFu9s_Us_BFu1i) C1{ Fs:9 Fs Fi:1}



static void Test_BFu9s_Us_BFu1i()
{
  {
    init_simple_test("BFu9s_Us_BFu1i");
    static STRUCT_IF_C BFu9s_Us_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Us_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Us_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu1i");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu1i.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu9s_Us_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu1i, BFu9s_Us_BFu1i)
//============================================================================


struct  BFu9s_Us_BFu1ll  {
  unsigned short v1:9;
  unsigned short v2;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_Us_BFu1ll) C1{ Fs:9 Fs FL:1}



static void Test_BFu9s_Us_BFu1ll()
{
  {
    init_simple_test("BFu9s_Us_BFu1ll");
    static STRUCT_IF_C BFu9s_Us_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Us_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Us_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu1ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu9s_Us_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu1ll, BFu9s_Us_BFu1ll)
//============================================================================


struct  BFu9s_Us_BFu1s  {
  unsigned short v1:9;
  unsigned short v2;
  unsigned short v3:1;
};
//SIG(1 BFu9s_Us_BFu1s) C1{ Fs:9 Fs Fs:1}



static void Test_BFu9s_Us_BFu1s()
{
  {
    init_simple_test("BFu9s_Us_BFu1s");
    static STRUCT_IF_C BFu9s_Us_BFu1s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_Us_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Us_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu1s");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu1s.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu9s_Us_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu1s, BFu9s_Us_BFu1s)
//============================================================================


struct  BFu9s_Us_BFu31i  {
  unsigned short v1:9;
  unsigned short v2;
  unsigned int v3:31;
};
//SIG(1 BFu9s_Us_BFu31i) C1{ Fs:9 Fs Fi:31}



static void Test_BFu9s_Us_BFu31i()
{
  {
    init_simple_test("BFu9s_Us_BFu31i");
    static STRUCT_IF_C BFu9s_Us_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Us_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Us_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu31i");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_Us_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_Us_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu31i, BFu9s_Us_BFu31i)
//============================================================================


struct  BFu9s_Us_BFu31ll  {
  unsigned short v1:9;
  unsigned short v2;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_Us_BFu31ll) C1{ Fs:9 Fs FL:31}



static void Test_BFu9s_Us_BFu31ll()
{
  {
    init_simple_test("BFu9s_Us_BFu31ll");
    static STRUCT_IF_C BFu9s_Us_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Us_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Us_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu31ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu9s_Us_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_Us_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu31ll, BFu9s_Us_BFu31ll)
//============================================================================


struct  BFu9s_Us_BFu32i  {
  unsigned short v1:9;
  unsigned short v2;
  unsigned int v3:32;
};
//SIG(1 BFu9s_Us_BFu32i) C1{ Fs:9 Fs Fi:32}



static void Test_BFu9s_Us_BFu32i()
{
  {
    init_simple_test("BFu9s_Us_BFu32i");
    static STRUCT_IF_C BFu9s_Us_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Us_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Us_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu32i");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_Us_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_Us_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu32i, BFu9s_Us_BFu32i)
//============================================================================


struct  BFu9s_Us_BFu32ll  {
  unsigned short v1:9;
  unsigned short v2;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_Us_BFu32ll) C1{ Fs:9 Fs FL:32}



static void Test_BFu9s_Us_BFu32ll()
{
  {
    init_simple_test("BFu9s_Us_BFu32ll");
    static STRUCT_IF_C BFu9s_Us_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Us_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Us_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu32ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu9s_Us_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_Us_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu32ll, BFu9s_Us_BFu32ll)
//============================================================================


struct  BFu9s_Us_BFu33  {
  unsigned short v1:9;
  unsigned short v2;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_Us_BFu33) C1{ Fs:9 Fs FL:33}



static void Test_BFu9s_Us_BFu33()
{
  {
    init_simple_test("BFu9s_Us_BFu33");
    static STRUCT_IF_C BFu9s_Us_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_Us_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Us_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu33");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu9s_Us_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu9s_Us_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu33, BFu9s_Us_BFu33)
//============================================================================


struct  BFu9s_Us_BFu7c  {
  unsigned short v1:9;
  unsigned short v2;
  unsigned char v3:7;
};
//SIG(1 BFu9s_Us_BFu7c) C1{ Fs:9 Fs Fc:7}



static void Test_BFu9s_Us_BFu7c()
{
  {
    init_simple_test("BFu9s_Us_BFu7c");
    static STRUCT_IF_C BFu9s_Us_BFu7c lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_Us_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Us_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu7c");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu7c.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu9s_Us_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu9s_Us_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu7c, BFu9s_Us_BFu7c)
//============================================================================


struct  BFu9s_Us_BFu7i  {
  unsigned short v1:9;
  unsigned short v2;
  unsigned int v3:7;
};
//SIG(1 BFu9s_Us_BFu7i) C1{ Fs:9 Fs Fi:7}



static void Test_BFu9s_Us_BFu7i()
{
  {
    init_simple_test("BFu9s_Us_BFu7i");
    static STRUCT_IF_C BFu9s_Us_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Us_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Us_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu7i");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu7i.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu9s_Us_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu9s_Us_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu7i, BFu9s_Us_BFu7i)
//============================================================================


struct  BFu9s_Us_BFu7ll  {
  unsigned short v1:9;
  unsigned short v2;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_Us_BFu7ll) C1{ Fs:9 Fs FL:7}



static void Test_BFu9s_Us_BFu7ll()
{
  {
    init_simple_test("BFu9s_Us_BFu7ll");
    static STRUCT_IF_C BFu9s_Us_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Us_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Us_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu7ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu9s_Us_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu9s_Us_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu7ll, BFu9s_Us_BFu7ll)
//============================================================================


struct  BFu9s_Us_BFu7s  {
  unsigned short v1:9;
  unsigned short v2;
  unsigned short v3:7;
};
//SIG(1 BFu9s_Us_BFu7s) C1{ Fs:9 Fs Fs:7}



static void Test_BFu9s_Us_BFu7s()
{
  {
    init_simple_test("BFu9s_Us_BFu7s");
    static STRUCT_IF_C BFu9s_Us_BFu7s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_Us_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Us_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu7s");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu7s.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu9s_Us_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu9s_Us_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu7s, BFu9s_Us_BFu7s)
//============================================================================


struct  BFu9s_Us_BFu8c  {
  unsigned short v1:9;
  unsigned short v2;
  unsigned char v3:8;
};
//SIG(1 BFu9s_Us_BFu8c) C1{ Fs:9 Fs Fc:8}



static void Test_BFu9s_Us_BFu8c()
{
  {
    init_simple_test("BFu9s_Us_BFu8c");
    static STRUCT_IF_C BFu9s_Us_BFu8c lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_Us_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Us_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu8c");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu8c.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_Us_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_Us_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu8c, BFu9s_Us_BFu8c)
//============================================================================


struct  BFu9s_Us_BFu8i  {
  unsigned short v1:9;
  unsigned short v2;
  unsigned int v3:8;
};
//SIG(1 BFu9s_Us_BFu8i) C1{ Fs:9 Fs Fi:8}



static void Test_BFu9s_Us_BFu8i()
{
  {
    init_simple_test("BFu9s_Us_BFu8i");
    static STRUCT_IF_C BFu9s_Us_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Us_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Us_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu8i");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu8i.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_Us_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_Us_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu8i, BFu9s_Us_BFu8i)
//============================================================================


struct  BFu9s_Us_BFu8ll  {
  unsigned short v1:9;
  unsigned short v2;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_Us_BFu8ll) C1{ Fs:9 Fs FL:8}



static void Test_BFu9s_Us_BFu8ll()
{
  {
    init_simple_test("BFu9s_Us_BFu8ll");
    static STRUCT_IF_C BFu9s_Us_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Us_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Us_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu8ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_Us_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_Us_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu8ll, BFu9s_Us_BFu8ll)
//============================================================================


struct  BFu9s_Us_BFu8s  {
  unsigned short v1:9;
  unsigned short v2;
  unsigned short v3:8;
};
//SIG(1 BFu9s_Us_BFu8s) C1{ Fs:9 Fs Fs:8}



static void Test_BFu9s_Us_BFu8s()
{
  {
    init_simple_test("BFu9s_Us_BFu8s");
    static STRUCT_IF_C BFu9s_Us_BFu8s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_Us_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Us_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu8s");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu8s.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu9s_Us_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_Us_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu8s, BFu9s_Us_BFu8s)
//============================================================================


struct  BFu9s_Us_BFu9i  {
  unsigned short v1:9;
  unsigned short v2;
  unsigned int v3:9;
};
//SIG(1 BFu9s_Us_BFu9i) C1{ Fs:9 Fs Fi:9}



static void Test_BFu9s_Us_BFu9i()
{
  {
    init_simple_test("BFu9s_Us_BFu9i");
    static STRUCT_IF_C BFu9s_Us_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Us_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Us_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu9i");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_Us_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu9i, BFu9s_Us_BFu9i)
//============================================================================


struct  BFu9s_Us_BFu9ll  {
  unsigned short v1:9;
  unsigned short v2;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_Us_BFu9ll) C1{ Fs:9 Fs FL:9}



static void Test_BFu9s_Us_BFu9ll()
{
  {
    init_simple_test("BFu9s_Us_BFu9ll");
    static STRUCT_IF_C BFu9s_Us_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Us_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Us_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu9ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_Us_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu9ll, BFu9s_Us_BFu9ll)
//============================================================================


struct  BFu9s_Us_BFu9s  {
  unsigned short v1:9;
  unsigned short v2;
  unsigned short v3:9;
};
//SIG(1 BFu9s_Us_BFu9s) C1{ Fs:9 Fs Fs:9}



static void Test_BFu9s_Us_BFu9s()
{
  {
    init_simple_test("BFu9s_Us_BFu9s");
    static STRUCT_IF_C BFu9s_Us_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_Us_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Us_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu9s");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu9s_Us_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu9s, BFu9s_Us_BFu9s)
//============================================================================


struct  BFu9s_Us_C  {
  unsigned short v1:9;
  unsigned short v2;
  char v3;
};
//SIG(1 BFu9s_Us_C) C1{ Fs:9 Fs Fc}



static void Test_BFu9s_Us_C()
{
  {
    init_simple_test("BFu9s_Us_C");
    static STRUCT_IF_C BFu9s_Us_C lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_Us_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Us_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_C");
    check_field_offset(lv, v2, 2, "BFu9s_Us_C.v2");
    check_field_offset(lv, v3, 4, "BFu9s_Us_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_C, BFu9s_Us_C)
//============================================================================


struct  BFu9s_Us_D  {
  unsigned short v1:9;
  unsigned short v2;
  double v3;
};
//SIG(1 BFu9s_Us_D) C1{ Fs:9 Fs FL}



static void Test_BFu9s_Us_D()
{
  {
    init_simple_test("BFu9s_Us_D");
    static STRUCT_IF_C BFu9s_Us_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_Us_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Us_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_D");
    check_field_offset(lv, v2, 2, "BFu9s_Us_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_Us_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_D, BFu9s_Us_D)
//============================================================================


struct  BFu9s_Us_F  {
  unsigned short v1:9;
  unsigned short v2;
  float v3;
};
//SIG(1 BFu9s_Us_F) C1{ Fs:9 Fs Fi}



static void Test_BFu9s_Us_F()
{
  {
    init_simple_test("BFu9s_Us_F");
    static STRUCT_IF_C BFu9s_Us_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Us_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Us_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_F");
    check_field_offset(lv, v2, 2, "BFu9s_Us_F.v2");
    check_field_offset(lv, v3, 4, "BFu9s_Us_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_F, BFu9s_Us_F)
//============================================================================


struct  BFu9s_Us_I  {
  unsigned short v1:9;
  unsigned short v2;
  int v3;
};
//SIG(1 BFu9s_Us_I) C1{ Fs:9 Fs Fi}



static void Test_BFu9s_Us_I()
{
  {
    init_simple_test("BFu9s_Us_I");
    static STRUCT_IF_C BFu9s_Us_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Us_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Us_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_I");
    check_field_offset(lv, v2, 2, "BFu9s_Us_I.v2");
    check_field_offset(lv, v3, 4, "BFu9s_Us_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_I, BFu9s_Us_I)
//============================================================================


struct  BFu9s_Us_Ip  {
  unsigned short v1:9;
  unsigned short v2;
  int *v3;
};
//SIG(1 BFu9s_Us_Ip) C1{ Fs:9 Fs Fp}



static void Test_BFu9s_Us_Ip()
{
  {
    init_simple_test("BFu9s_Us_Ip");
    static STRUCT_IF_C BFu9s_Us_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_Us_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Us_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_Ip");
    check_field_offset(lv, v2, 2, "BFu9s_Us_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_Us_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_Ip, BFu9s_Us_Ip)
//============================================================================


struct  BFu9s_Us_L  {
  unsigned short v1:9;
  unsigned short v2;
  __tsi64 v3;
};
//SIG(1 BFu9s_Us_L) C1{ Fs:9 Fs FL}



static void Test_BFu9s_Us_L()
{
  {
    init_simple_test("BFu9s_Us_L");
    static STRUCT_IF_C BFu9s_Us_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_Us_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Us_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_L");
    check_field_offset(lv, v2, 2, "BFu9s_Us_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_Us_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_L, BFu9s_Us_L)
//============================================================================


struct  BFu9s_Us_S  {
  unsigned short v1:9;
  unsigned short v2;
  short v3;
};
//SIG(1 BFu9s_Us_S) C1{ Fs:9 Fs[2]}



static void Test_BFu9s_Us_S()
{
  {
    init_simple_test("BFu9s_Us_S");
    static STRUCT_IF_C BFu9s_Us_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_Us_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Us_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_S");
    check_field_offset(lv, v2, 2, "BFu9s_Us_S.v2");
    check_field_offset(lv, v3, 4, "BFu9s_Us_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_S, BFu9s_Us_S)
//============================================================================


struct  BFu9s_Us_Uc  {
  unsigned short v1:9;
  unsigned short v2;
  unsigned char v3;
};
//SIG(1 BFu9s_Us_Uc) C1{ Fs:9 Fs Fc}



static void Test_BFu9s_Us_Uc()
{
  {
    init_simple_test("BFu9s_Us_Uc");
    static STRUCT_IF_C BFu9s_Us_Uc lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_Us_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Us_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_Uc");
    check_field_offset(lv, v2, 2, "BFu9s_Us_Uc.v2");
    check_field_offset(lv, v3, 4, "BFu9s_Us_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_Uc, BFu9s_Us_Uc)
//============================================================================


struct  BFu9s_Us_Ui  {
  unsigned short v1:9;
  unsigned short v2;
  unsigned int v3;
};
//SIG(1 BFu9s_Us_Ui) C1{ Fs:9 Fs Fi}



static void Test_BFu9s_Us_Ui()
{
  {
    init_simple_test("BFu9s_Us_Ui");
    static STRUCT_IF_C BFu9s_Us_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Us_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Us_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_Ui");
    check_field_offset(lv, v2, 2, "BFu9s_Us_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu9s_Us_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_Ui, BFu9s_Us_Ui)
//============================================================================


struct  BFu9s_Us_Ul  {
  unsigned short v1:9;
  unsigned short v2;
  __tsu64 v3;
};
//SIG(1 BFu9s_Us_Ul) C1{ Fs:9 Fs FL}



static void Test_BFu9s_Us_Ul()
{
  {
    init_simple_test("BFu9s_Us_Ul");
    static STRUCT_IF_C BFu9s_Us_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_Us_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Us_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_Ul");
    check_field_offset(lv, v2, 2, "BFu9s_Us_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_Us_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_Ul, BFu9s_Us_Ul)
//============================================================================


struct  BFu9s_Us_Us  {
  unsigned short v1:9;
  unsigned short v2;
  unsigned short v3;
};
//SIG(1 BFu9s_Us_Us) C1{ Fs:9 Fs[2]}



static void Test_BFu9s_Us_Us()
{
  {
    init_simple_test("BFu9s_Us_Us");
    static STRUCT_IF_C BFu9s_Us_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu9s_Us_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Us_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_Us");
    check_field_offset(lv, v2, 2, "BFu9s_Us_Us.v2");
    check_field_offset(lv, v3, 4, "BFu9s_Us_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_Us, BFu9s_Us_Us)
//============================================================================


struct  BFu9s_Us_Vp  {
  unsigned short v1:9;
  unsigned short v2;
  void *v3;
};
//SIG(1 BFu9s_Us_Vp) C1{ Fs:9 Fs Fp}



static void Test_BFu9s_Us_Vp()
{
  {
    init_simple_test("BFu9s_Us_Vp");
    static STRUCT_IF_C BFu9s_Us_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_Us_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Us_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_Vp");
    check_field_offset(lv, v2, 2, "BFu9s_Us_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu9s_Us_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_Vp, BFu9s_Us_Vp)
//============================================================================


struct  BFu9s_Vp  {
  unsigned short v1:9;
  void *v2;
};
//SIG(1 BFu9s_Vp) C1{ Fs:9 Fp}



static void Test_BFu9s_Vp()
{
  {
    init_simple_test("BFu9s_Vp");
    static STRUCT_IF_C BFu9s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp, BFu9s_Vp)
//============================================================================


struct  BFu9s_Vp_BFu15i  {
  unsigned short v1:9;
  void *v2;
  unsigned int v3:15;
};
//SIG(1 BFu9s_Vp_BFu15i) C1{ Fs:9 Fp Fi:15}



static void Test_BFu9s_Vp_BFu15i()
{
  {
    init_simple_test("BFu9s_Vp_BFu15i");
    static STRUCT_IF_C BFu9s_Vp_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu9s_Vp_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu9s_Vp_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu15i, BFu9s_Vp_BFu15i)
//============================================================================


struct  BFu9s_Vp_BFu15ll  {
  unsigned short v1:9;
  void *v2;
  __tsu64 v3:15;
};
//SIG(1 BFu9s_Vp_BFu15ll) C1{ Fs:9 Fp FL:15}



static void Test_BFu9s_Vp_BFu15ll()
{
  {
    init_simple_test("BFu9s_Vp_BFu15ll");
    static STRUCT_IF_C BFu9s_Vp_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu9s_Vp_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu9s_Vp_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu15ll, BFu9s_Vp_BFu15ll)
//============================================================================


struct  BFu9s_Vp_BFu15s  {
  unsigned short v1:9;
  void *v2;
  unsigned short v3:15;
};
//SIG(1 BFu9s_Vp_BFu15s) C1{ Fs:9 Fp Fs:15}



static void Test_BFu9s_Vp_BFu15s()
{
  {
    init_simple_test("BFu9s_Vp_BFu15s");
    static STRUCT_IF_C BFu9s_Vp_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu9s_Vp_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu9s_Vp_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu15s, BFu9s_Vp_BFu15s)
//============================================================================


struct  BFu9s_Vp_BFu16i  {
  unsigned short v1:9;
  void *v2;
  unsigned int v3:16;
};
//SIG(1 BFu9s_Vp_BFu16i) C1{ Fs:9 Fp Fi:16}



static void Test_BFu9s_Vp_BFu16i()
{
  {
    init_simple_test("BFu9s_Vp_BFu16i");
    static STRUCT_IF_C BFu9s_Vp_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu9s_Vp_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu9s_Vp_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu16i, BFu9s_Vp_BFu16i)
//============================================================================


struct  BFu9s_Vp_BFu16ll  {
  unsigned short v1:9;
  void *v2;
  __tsu64 v3:16;
};
//SIG(1 BFu9s_Vp_BFu16ll) C1{ Fs:9 Fp FL:16}



static void Test_BFu9s_Vp_BFu16ll()
{
  {
    init_simple_test("BFu9s_Vp_BFu16ll");
    static STRUCT_IF_C BFu9s_Vp_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu9s_Vp_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu9s_Vp_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu16ll, BFu9s_Vp_BFu16ll)
//============================================================================


struct  BFu9s_Vp_BFu16s  {
  unsigned short v1:9;
  void *v2;
  unsigned short v3:16;
};
//SIG(1 BFu9s_Vp_BFu16s) C1{ Fs:9 Fp Fs:16}



static void Test_BFu9s_Vp_BFu16s()
{
  {
    init_simple_test("BFu9s_Vp_BFu16s");
    static STRUCT_IF_C BFu9s_Vp_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu9s_Vp_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu9s_Vp_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu16s, BFu9s_Vp_BFu16s)
//============================================================================


struct  BFu9s_Vp_BFu17i  {
  unsigned short v1:9;
  void *v2;
  unsigned int v3:17;
};
//SIG(1 BFu9s_Vp_BFu17i) C1{ Fs:9 Fp Fi:17}



static void Test_BFu9s_Vp_BFu17i()
{
  {
    init_simple_test("BFu9s_Vp_BFu17i");
    static STRUCT_IF_C BFu9s_Vp_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu9s_Vp_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu9s_Vp_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu17i, BFu9s_Vp_BFu17i)
//============================================================================


struct  BFu9s_Vp_BFu17ll  {
  unsigned short v1:9;
  void *v2;
  __tsu64 v3:17;
};
//SIG(1 BFu9s_Vp_BFu17ll) C1{ Fs:9 Fp FL:17}



static void Test_BFu9s_Vp_BFu17ll()
{
  {
    init_simple_test("BFu9s_Vp_BFu17ll");
    static STRUCT_IF_C BFu9s_Vp_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu9s_Vp_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu9s_Vp_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu17ll, BFu9s_Vp_BFu17ll)
//============================================================================


struct  BFu9s_Vp_BFu1c  {
  unsigned short v1:9;
  void *v2;
  unsigned char v3:1;
};
//SIG(1 BFu9s_Vp_BFu1c) C1{ Fs:9 Fp Fc:1}



static void Test_BFu9s_Vp_BFu1c()
{
  {
    init_simple_test("BFu9s_Vp_BFu1c");
    static STRUCT_IF_C BFu9s_Vp_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu9s_Vp_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu1c, BFu9s_Vp_BFu1c)
//============================================================================


struct  BFu9s_Vp_BFu1i  {
  unsigned short v1:9;
  void *v2;
  unsigned int v3:1;
};
//SIG(1 BFu9s_Vp_BFu1i) C1{ Fs:9 Fp Fi:1}



static void Test_BFu9s_Vp_BFu1i()
{
  {
    init_simple_test("BFu9s_Vp_BFu1i");
    static STRUCT_IF_C BFu9s_Vp_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu9s_Vp_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu1i, BFu9s_Vp_BFu1i)
//============================================================================


struct  BFu9s_Vp_BFu1ll  {
  unsigned short v1:9;
  void *v2;
  __tsu64 v3:1;
};
//SIG(1 BFu9s_Vp_BFu1ll) C1{ Fs:9 Fp FL:1}



static void Test_BFu9s_Vp_BFu1ll()
{
  {
    init_simple_test("BFu9s_Vp_BFu1ll");
    static STRUCT_IF_C BFu9s_Vp_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu9s_Vp_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu1ll, BFu9s_Vp_BFu1ll)
//============================================================================


struct  BFu9s_Vp_BFu1s  {
  unsigned short v1:9;
  void *v2;
  unsigned short v3:1;
};
//SIG(1 BFu9s_Vp_BFu1s) C1{ Fs:9 Fp Fs:1}



static void Test_BFu9s_Vp_BFu1s()
{
  {
    init_simple_test("BFu9s_Vp_BFu1s");
    static STRUCT_IF_C BFu9s_Vp_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu9s_Vp_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu1s, BFu9s_Vp_BFu1s)
//============================================================================


struct  BFu9s_Vp_BFu31i  {
  unsigned short v1:9;
  void *v2;
  unsigned int v3:31;
};
//SIG(1 BFu9s_Vp_BFu31i) C1{ Fs:9 Fp Fi:31}



static void Test_BFu9s_Vp_BFu31i()
{
  {
    init_simple_test("BFu9s_Vp_BFu31i");
    static STRUCT_IF_C BFu9s_Vp_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu9s_Vp_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu9s_Vp_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu31i, BFu9s_Vp_BFu31i)
//============================================================================


struct  BFu9s_Vp_BFu31ll  {
  unsigned short v1:9;
  void *v2;
  __tsu64 v3:31;
};
//SIG(1 BFu9s_Vp_BFu31ll) C1{ Fs:9 Fp FL:31}



static void Test_BFu9s_Vp_BFu31ll()
{
  {
    init_simple_test("BFu9s_Vp_BFu31ll");
    static STRUCT_IF_C BFu9s_Vp_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu9s_Vp_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu9s_Vp_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu31ll, BFu9s_Vp_BFu31ll)
//============================================================================


struct  BFu9s_Vp_BFu32i  {
  unsigned short v1:9;
  void *v2;
  unsigned int v3:32;
};
//SIG(1 BFu9s_Vp_BFu32i) C1{ Fs:9 Fp Fi:32}



static void Test_BFu9s_Vp_BFu32i()
{
  {
    init_simple_test("BFu9s_Vp_BFu32i");
    static STRUCT_IF_C BFu9s_Vp_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu9s_Vp_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu9s_Vp_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu32i, BFu9s_Vp_BFu32i)
//============================================================================


struct  BFu9s_Vp_BFu32ll  {
  unsigned short v1:9;
  void *v2;
  __tsu64 v3:32;
};
//SIG(1 BFu9s_Vp_BFu32ll) C1{ Fs:9 Fp FL:32}



static void Test_BFu9s_Vp_BFu32ll()
{
  {
    init_simple_test("BFu9s_Vp_BFu32ll");
    static STRUCT_IF_C BFu9s_Vp_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu9s_Vp_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu9s_Vp_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu32ll, BFu9s_Vp_BFu32ll)
//============================================================================


struct  BFu9s_Vp_BFu33  {
  unsigned short v1:9;
  void *v2;
  __tsu64 v3:33;
};
//SIG(1 BFu9s_Vp_BFu33) C1{ Fs:9 Fp FL:33}



static void Test_BFu9s_Vp_BFu33()
{
  {
    init_simple_test("BFu9s_Vp_BFu33");
    static STRUCT_IF_C BFu9s_Vp_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Vp_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "BFu9s_Vp_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "BFu9s_Vp_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu33, BFu9s_Vp_BFu33)
//============================================================================


struct  BFu9s_Vp_BFu7c  {
  unsigned short v1:9;
  void *v2;
  unsigned char v3:7;
};
//SIG(1 BFu9s_Vp_BFu7c) C1{ Fs:9 Fp Fc:7}



static void Test_BFu9s_Vp_BFu7c()
{
  {
    init_simple_test("BFu9s_Vp_BFu7c");
    static STRUCT_IF_C BFu9s_Vp_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu9s_Vp_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu9s_Vp_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu7c, BFu9s_Vp_BFu7c)
//============================================================================


struct  BFu9s_Vp_BFu7i  {
  unsigned short v1:9;
  void *v2;
  unsigned int v3:7;
};
//SIG(1 BFu9s_Vp_BFu7i) C1{ Fs:9 Fp Fi:7}



static void Test_BFu9s_Vp_BFu7i()
{
  {
    init_simple_test("BFu9s_Vp_BFu7i");
    static STRUCT_IF_C BFu9s_Vp_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu9s_Vp_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu9s_Vp_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu7i, BFu9s_Vp_BFu7i)
//============================================================================


struct  BFu9s_Vp_BFu7ll  {
  unsigned short v1:9;
  void *v2;
  __tsu64 v3:7;
};
//SIG(1 BFu9s_Vp_BFu7ll) C1{ Fs:9 Fp FL:7}



static void Test_BFu9s_Vp_BFu7ll()
{
  {
    init_simple_test("BFu9s_Vp_BFu7ll");
    static STRUCT_IF_C BFu9s_Vp_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu9s_Vp_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu9s_Vp_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu7ll, BFu9s_Vp_BFu7ll)
//============================================================================


struct  BFu9s_Vp_BFu7s  {
  unsigned short v1:9;
  void *v2;
  unsigned short v3:7;
};
//SIG(1 BFu9s_Vp_BFu7s) C1{ Fs:9 Fp Fs:7}



static void Test_BFu9s_Vp_BFu7s()
{
  {
    init_simple_test("BFu9s_Vp_BFu7s");
    static STRUCT_IF_C BFu9s_Vp_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu9s_Vp_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu9s_Vp_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu7s, BFu9s_Vp_BFu7s)
//============================================================================


struct  BFu9s_Vp_BFu8c  {
  unsigned short v1:9;
  void *v2;
  unsigned char v3:8;
};
//SIG(1 BFu9s_Vp_BFu8c) C1{ Fs:9 Fp Fc:8}



static void Test_BFu9s_Vp_BFu8c()
{
  {
    init_simple_test("BFu9s_Vp_BFu8c");
    static STRUCT_IF_C BFu9s_Vp_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu9s_Vp_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu9s_Vp_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu8c, BFu9s_Vp_BFu8c)
//============================================================================


struct  BFu9s_Vp_BFu8i  {
  unsigned short v1:9;
  void *v2;
  unsigned int v3:8;
};
//SIG(1 BFu9s_Vp_BFu8i) C1{ Fs:9 Fp Fi:8}



static void Test_BFu9s_Vp_BFu8i()
{
  {
    init_simple_test("BFu9s_Vp_BFu8i");
    static STRUCT_IF_C BFu9s_Vp_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu9s_Vp_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu9s_Vp_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu8i, BFu9s_Vp_BFu8i)
//============================================================================


struct  BFu9s_Vp_BFu8ll  {
  unsigned short v1:9;
  void *v2;
  __tsu64 v3:8;
};
//SIG(1 BFu9s_Vp_BFu8ll) C1{ Fs:9 Fp FL:8}



static void Test_BFu9s_Vp_BFu8ll()
{
  {
    init_simple_test("BFu9s_Vp_BFu8ll");
    static STRUCT_IF_C BFu9s_Vp_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu9s_Vp_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu9s_Vp_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu8ll, BFu9s_Vp_BFu8ll)
//============================================================================


struct  BFu9s_Vp_BFu8s  {
  unsigned short v1:9;
  void *v2;
  unsigned short v3:8;
};
//SIG(1 BFu9s_Vp_BFu8s) C1{ Fs:9 Fp Fs:8}



static void Test_BFu9s_Vp_BFu8s()
{
  {
    init_simple_test("BFu9s_Vp_BFu8s");
    static STRUCT_IF_C BFu9s_Vp_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu9s_Vp_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu9s_Vp_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu8s, BFu9s_Vp_BFu8s)
//============================================================================


struct  BFu9s_Vp_BFu9i  {
  unsigned short v1:9;
  void *v2;
  unsigned int v3:9;
};
//SIG(1 BFu9s_Vp_BFu9i) C1{ Fs:9 Fp Fi:9}



static void Test_BFu9s_Vp_BFu9i()
{
  {
    init_simple_test("BFu9s_Vp_BFu9i");
    static STRUCT_IF_C BFu9s_Vp_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu9s_Vp_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu9i, BFu9s_Vp_BFu9i)
//============================================================================


struct  BFu9s_Vp_BFu9ll  {
  unsigned short v1:9;
  void *v2;
  __tsu64 v3:9;
};
//SIG(1 BFu9s_Vp_BFu9ll) C1{ Fs:9 Fp FL:9}



static void Test_BFu9s_Vp_BFu9ll()
{
  {
    init_simple_test("BFu9s_Vp_BFu9ll");
    static STRUCT_IF_C BFu9s_Vp_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu9s_Vp_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu9ll, BFu9s_Vp_BFu9ll)
//============================================================================


struct  BFu9s_Vp_BFu9s  {
  unsigned short v1:9;
  void *v2;
  unsigned short v3:9;
};
//SIG(1 BFu9s_Vp_BFu9s) C1{ Fs:9 Fp Fs:9}



static void Test_BFu9s_Vp_BFu9s()
{
  {
    init_simple_test("BFu9s_Vp_BFu9s");
    static STRUCT_IF_C BFu9s_Vp_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu9s_Vp_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu9s, BFu9s_Vp_BFu9s)
//============================================================================


struct  BFu9s_Vp_C  {
  unsigned short v1:9;
  void *v2;
  char v3;
};
//SIG(1 BFu9s_Vp_C) C1{ Fs:9 Fp Fc}



static void Test_BFu9s_Vp_C()
{
  {
    init_simple_test("BFu9s_Vp_C");
    static STRUCT_IF_C BFu9s_Vp_C lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu9s_Vp_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_C, BFu9s_Vp_C)
//============================================================================


struct  BFu9s_Vp_D  {
  unsigned short v1:9;
  void *v2;
  double v3;
};
//SIG(1 BFu9s_Vp_D) C1{ Fs:9 Fp FL}



static void Test_BFu9s_Vp_D()
{
  {
    init_simple_test("BFu9s_Vp_D");
    static STRUCT_IF_C BFu9s_Vp_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Vp_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu9s_Vp_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_D, BFu9s_Vp_D)
//============================================================================


struct  BFu9s_Vp_F  {
  unsigned short v1:9;
  void *v2;
  float v3;
};
//SIG(1 BFu9s_Vp_F) C1{ Fs:9 Fp Fi}



static void Test_BFu9s_Vp_F()
{
  {
    init_simple_test("BFu9s_Vp_F");
    static STRUCT_IF_C BFu9s_Vp_F lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu9s_Vp_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_F, BFu9s_Vp_F)
//============================================================================


struct  BFu9s_Vp_I  {
  unsigned short v1:9;
  void *v2;
  int v3;
};
//SIG(1 BFu9s_Vp_I) C1{ Fs:9 Fp Fi}



static void Test_BFu9s_Vp_I()
{
  {
    init_simple_test("BFu9s_Vp_I");
    static STRUCT_IF_C BFu9s_Vp_I lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu9s_Vp_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_I, BFu9s_Vp_I)
//============================================================================


struct  BFu9s_Vp_Ip  {
  unsigned short v1:9;
  void *v2;
  int *v3;
};
//SIG(1 BFu9s_Vp_Ip) C1{ Fs:9 Fp[2]}



static void Test_BFu9s_Vp_Ip()
{
  {
    init_simple_test("BFu9s_Vp_Ip");
    static STRUCT_IF_C BFu9s_Vp_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu9s_Vp_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_Ip, BFu9s_Vp_Ip)
//============================================================================


struct  BFu9s_Vp_L  {
  unsigned short v1:9;
  void *v2;
  __tsi64 v3;
};
//SIG(1 BFu9s_Vp_L) C1{ Fs:9 Fp FL}



static void Test_BFu9s_Vp_L()
{
  {
    init_simple_test("BFu9s_Vp_L");
    static STRUCT_IF_C BFu9s_Vp_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Vp_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu9s_Vp_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_L, BFu9s_Vp_L)
//============================================================================


struct  BFu9s_Vp_S  {
  unsigned short v1:9;
  void *v2;
  short v3;
};
//SIG(1 BFu9s_Vp_S) C1{ Fs:9 Fp Fs}



static void Test_BFu9s_Vp_S()
{
  {
    init_simple_test("BFu9s_Vp_S");
    static STRUCT_IF_C BFu9s_Vp_S lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu9s_Vp_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_S, BFu9s_Vp_S)
//============================================================================


struct  BFu9s_Vp_Uc  {
  unsigned short v1:9;
  void *v2;
  unsigned char v3;
};
//SIG(1 BFu9s_Vp_Uc) C1{ Fs:9 Fp Fc}



static void Test_BFu9s_Vp_Uc()
{
  {
    init_simple_test("BFu9s_Vp_Uc");
    static STRUCT_IF_C BFu9s_Vp_Uc lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu9s_Vp_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_Uc, BFu9s_Vp_Uc)
//============================================================================


struct  BFu9s_Vp_Ui  {
  unsigned short v1:9;
  void *v2;
  unsigned int v3;
};
//SIG(1 BFu9s_Vp_Ui) C1{ Fs:9 Fp Fi}



static void Test_BFu9s_Vp_Ui()
{
  {
    init_simple_test("BFu9s_Vp_Ui");
    static STRUCT_IF_C BFu9s_Vp_Ui lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu9s_Vp_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_Ui, BFu9s_Vp_Ui)
//============================================================================


struct  BFu9s_Vp_Ul  {
  unsigned short v1:9;
  void *v2;
  __tsu64 v3;
};
//SIG(1 BFu9s_Vp_Ul) C1{ Fs:9 Fp FL}



static void Test_BFu9s_Vp_Ul()
{
  {
    init_simple_test("BFu9s_Vp_Ul");
    static STRUCT_IF_C BFu9s_Vp_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu9s_Vp_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu9s_Vp_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_Ul, BFu9s_Vp_Ul)
//============================================================================


struct  BFu9s_Vp_Us  {
  unsigned short v1:9;
  void *v2;
  unsigned short v3;
};
//SIG(1 BFu9s_Vp_Us) C1{ Fs:9 Fp Fs}



static void Test_BFu9s_Vp_Us()
{
  {
    init_simple_test("BFu9s_Vp_Us");
    static STRUCT_IF_C BFu9s_Vp_Us lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu9s_Vp_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_Us, BFu9s_Vp_Us)
//============================================================================


struct  BFu9s_Vp_Vp  {
  unsigned short v1:9;
  void *v2;
  void *v3;
};
//SIG(1 BFu9s_Vp_Vp) C1{ Fs:9 Fp[2]}



static void Test_BFu9s_Vp_Vp()
{
  {
    init_simple_test("BFu9s_Vp_Vp");
    static STRUCT_IF_C BFu9s_Vp_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu9s_Vp_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu9s_Vp_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_Vp, BFu9s_Vp_Vp)
//============================================================================


struct  C  {
  char v1;
};
//SIG(1 C) C1{ Fc}



static void Test_C()
{
  {
    init_simple_test("C");
    STRUCT_IF_C C lv;
    check2(sizeof(lv), 1, "sizeof(C)");
    check2(__alignof__(lv), 1, "__alignof__(C)");
    check_field_offset(lv, v1, 0, "C.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_C, C)
//============================================================================


struct  C_BFu15i  {
  char v1;
  unsigned int v2:15;
};
//SIG(1 C_BFu15i) C1{ Fc Fi:15}



static void Test_C_BFu15i()
{
  {
    init_simple_test("C_BFu15i");
    static STRUCT_IF_C C_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i)");
    check_field_offset(lv, v1, 0, "C_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i, C_BFu15i)
//============================================================================


struct  C_BFu15i_BFu15i  {
  char v1;
  unsigned int v2:15;
  unsigned int v3:15;
};
//SIG(1 C_BFu15i_BFu15i) C1{ Fc Fi:15 Fi:15}



static void Test_C_BFu15i_BFu15i()
{
  {
    init_simple_test("C_BFu15i_BFu15i");
    static STRUCT_IF_C C_BFu15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i_BFu15i)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "C_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu15i, C_BFu15i_BFu15i)
//============================================================================


struct  C_BFu15i_BFu15ll  {
  char v1;
  unsigned int v2:15;
  __tsu64 v3:15;
};
//SIG(1 C_BFu15i_BFu15ll) C1{ Fc Fi:15 FL:15}



static void Test_C_BFu15i_BFu15ll()
{
  {
    init_simple_test("C_BFu15i_BFu15ll");
    static STRUCT_IF_C C_BFu15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15i_BFu15ll)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, 1, "C_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, hide_ull(1LL<<14), "C_BFu15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu15ll, C_BFu15i_BFu15ll)
//============================================================================


struct  C_BFu15i_BFu15s  {
  char v1;
  unsigned int v2:15;
  unsigned short v3:15;
};
//SIG(1 C_BFu15i_BFu15s) C1{ Fc Fi:15 Fs:15}



static void Test_C_BFu15i_BFu15s()
{
  {
    init_simple_test("C_BFu15i_BFu15s");
    static STRUCT_IF_C C_BFu15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i_BFu15s)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "C_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu15s, C_BFu15i_BFu15s)
//============================================================================


struct  C_BFu15i_BFu16i  {
  char v1;
  unsigned int v2:15;
  unsigned int v3:16;
};
//SIG(1 C_BFu15i_BFu16i) C1{ Fc Fi:15 Fi:16}



static void Test_C_BFu15i_BFu16i()
{
  {
    init_simple_test("C_BFu15i_BFu16i");
    static STRUCT_IF_C C_BFu15i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i_BFu16i)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "C_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "C_BFu15i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu16i, C_BFu15i_BFu16i)
//============================================================================


struct  C_BFu15i_BFu16ll  {
  char v1;
  unsigned int v2:15;
  __tsu64 v3:16;
};
//SIG(1 C_BFu15i_BFu16ll) C1{ Fc Fi:15 FL:16}



static void Test_C_BFu15i_BFu16ll()
{
  {
    init_simple_test("C_BFu15i_BFu16ll");
    static STRUCT_IF_C C_BFu15i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15i_BFu16ll)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, 1, "C_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, hide_ull(1LL<<15), "C_BFu15i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu16ll, C_BFu15i_BFu16ll)
//============================================================================


struct  C_BFu15i_BFu16s  {
  char v1;
  unsigned int v2:15;
  unsigned short v3:16;
};
//SIG(1 C_BFu15i_BFu16s) C1{ Fc Fi:15 Fs:16}



static void Test_C_BFu15i_BFu16s()
{
  {
    init_simple_test("C_BFu15i_BFu16s");
    static STRUCT_IF_C C_BFu15i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i_BFu16s)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "C_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "C_BFu15i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu16s, C_BFu15i_BFu16s)
//============================================================================


struct  C_BFu15i_BFu17i  {
  char v1;
  unsigned int v2:15;
  unsigned int v3:17;
};
//SIG(1 C_BFu15i_BFu17i) C1{ Fc Fi:15 Fi:17}



static void Test_C_BFu15i_BFu17i()
{
  {
    init_simple_test("C_BFu15i_BFu17i");
    static STRUCT_IF_C C_BFu15i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i_BFu17i)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "C_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "C_BFu15i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu17i, C_BFu15i_BFu17i)
//============================================================================


struct  C_BFu15i_BFu17ll  {
  char v1;
  unsigned int v2:15;
  __tsu64 v3:17;
};
//SIG(1 C_BFu15i_BFu17ll) C1{ Fc Fi:15 FL:17}



static void Test_C_BFu15i_BFu17ll()
{
  {
    init_simple_test("C_BFu15i_BFu17ll");
    static STRUCT_IF_C C_BFu15i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15i_BFu17ll)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, 1, "C_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, hide_ull(1LL<<16), "C_BFu15i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu17ll, C_BFu15i_BFu17ll)
//============================================================================


struct  C_BFu15i_BFu1c  {
  char v1;
  unsigned int v2:15;
  unsigned char v3:1;
};
//SIG(1 C_BFu15i_BFu1c) C1{ Fc Fi:15 Fc:1}



static void Test_C_BFu15i_BFu1c()
{
  {
    init_simple_test("C_BFu15i_BFu1c");
    static STRUCT_IF_C C_BFu15i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu15i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i_BFu1c)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu1c");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "C_BFu15i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu1c, C_BFu15i_BFu1c)
//============================================================================


struct  C_BFu15i_BFu1i  {
  char v1;
  unsigned int v2:15;
  unsigned int v3:1;
};
//SIG(1 C_BFu15i_BFu1i) C1{ Fc Fi:15 Fi:1}



static void Test_C_BFu15i_BFu1i()
{
  {
    init_simple_test("C_BFu15i_BFu1i");
    static STRUCT_IF_C C_BFu15i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu15i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i_BFu1i)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu1i");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "C_BFu15i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu1i, C_BFu15i_BFu1i)
//============================================================================


struct  C_BFu15i_BFu1ll  {
  char v1;
  unsigned int v2:15;
  __tsu64 v3:1;
};
//SIG(1 C_BFu15i_BFu1ll) C1{ Fc Fi:15 FL:1}



static void Test_C_BFu15i_BFu1ll()
{
  {
    init_simple_test("C_BFu15i_BFu1ll");
    static STRUCT_IF_C C_BFu15i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15i_BFu1ll)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu1ll");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "C_BFu15i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu1ll, C_BFu15i_BFu1ll)
//============================================================================


struct  C_BFu15i_BFu1s  {
  char v1;
  unsigned int v2:15;
  unsigned short v3:1;
};
//SIG(1 C_BFu15i_BFu1s) C1{ Fc Fi:15 Fs:1}



static void Test_C_BFu15i_BFu1s()
{
  {
    init_simple_test("C_BFu15i_BFu1s");
    static STRUCT_IF_C C_BFu15i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu15i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i_BFu1s)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu1s");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "C_BFu15i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu1s, C_BFu15i_BFu1s)
//============================================================================


struct  C_BFu15i_BFu31i  {
  char v1;
  unsigned int v2:15;
  unsigned int v3:31;
};
//SIG(1 C_BFu15i_BFu31i) C1{ Fc Fi:15 Fi:31}



static void Test_C_BFu15i_BFu31i()
{
  {
    init_simple_test("C_BFu15i_BFu31i");
    static STRUCT_IF_C C_BFu15i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i_BFu31i)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "C_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "C_BFu15i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu31i, C_BFu15i_BFu31i)
//============================================================================


struct  C_BFu15i_BFu31ll  {
  char v1;
  unsigned int v2:15;
  __tsu64 v3:31;
};
//SIG(1 C_BFu15i_BFu31ll) C1{ Fc Fi:15 FL:31}



static void Test_C_BFu15i_BFu31ll()
{
  {
    init_simple_test("C_BFu15i_BFu31ll");
    static STRUCT_IF_C C_BFu15i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15i_BFu31ll)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, 1, "C_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, hide_ull(1LL<<30), "C_BFu15i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu31ll, C_BFu15i_BFu31ll)
//============================================================================


struct  C_BFu15i_BFu32i  {
  char v1;
  unsigned int v2:15;
  unsigned int v3:32;
};
//SIG(1 C_BFu15i_BFu32i) C1{ Fc Fi:15 Fi:32}



static void Test_C_BFu15i_BFu32i()
{
  {
    init_simple_test("C_BFu15i_BFu32i");
    static STRUCT_IF_C C_BFu15i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i_BFu32i)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "C_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "C_BFu15i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu32i, C_BFu15i_BFu32i)
//============================================================================


struct  C_BFu15i_BFu32ll  {
  char v1;
  unsigned int v2:15;
  __tsu64 v3:32;
};
//SIG(1 C_BFu15i_BFu32ll) C1{ Fc Fi:15 FL:32}



static void Test_C_BFu15i_BFu32ll()
{
  {
    init_simple_test("C_BFu15i_BFu32ll");
    static STRUCT_IF_C C_BFu15i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15i_BFu32ll)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, 1, "C_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, hide_ull(1LL<<31), "C_BFu15i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu32ll, C_BFu15i_BFu32ll)
//============================================================================


struct  C_BFu15i_BFu33  {
  char v1;
  unsigned int v2:15;
  __tsu64 v3:33;
};
//SIG(1 C_BFu15i_BFu33) C1{ Fc Fi:15 FL:33}



static void Test_C_BFu15i_BFu33()
{
  {
    init_simple_test("C_BFu15i_BFu33");
    static STRUCT_IF_C C_BFu15i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15i_BFu33)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, 1, "C_BFu15i_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, hide_ull(1LL<<32), "C_BFu15i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu33, C_BFu15i_BFu33)
//============================================================================


struct  C_BFu15i_BFu7c  {
  char v1;
  unsigned int v2:15;
  unsigned char v3:7;
};
//SIG(1 C_BFu15i_BFu7c) C1{ Fc Fi:15 Fc:7}



static void Test_C_BFu15i_BFu7c()
{
  {
    init_simple_test("C_BFu15i_BFu7c");
    static STRUCT_IF_C C_BFu15i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu15i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i_BFu7c)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "C_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "C_BFu15i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu7c, C_BFu15i_BFu7c)
//============================================================================


struct  C_BFu15i_BFu7i  {
  char v1;
  unsigned int v2:15;
  unsigned int v3:7;
};
//SIG(1 C_BFu15i_BFu7i) C1{ Fc Fi:15 Fi:7}



static void Test_C_BFu15i_BFu7i()
{
  {
    init_simple_test("C_BFu15i_BFu7i");
    static STRUCT_IF_C C_BFu15i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu15i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i_BFu7i)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "C_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "C_BFu15i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu7i, C_BFu15i_BFu7i)
//============================================================================


struct  C_BFu15i_BFu7ll  {
  char v1;
  unsigned int v2:15;
  __tsu64 v3:7;
};
//SIG(1 C_BFu15i_BFu7ll) C1{ Fc Fi:15 FL:7}



static void Test_C_BFu15i_BFu7ll()
{
  {
    init_simple_test("C_BFu15i_BFu7ll");
    static STRUCT_IF_C C_BFu15i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15i_BFu7ll)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "C_BFu15i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "C_BFu15i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu7ll, C_BFu15i_BFu7ll)
//============================================================================


struct  C_BFu15i_BFu7s  {
  char v1;
  unsigned int v2:15;
  unsigned short v3:7;
};
//SIG(1 C_BFu15i_BFu7s) C1{ Fc Fi:15 Fs:7}



static void Test_C_BFu15i_BFu7s()
{
  {
    init_simple_test("C_BFu15i_BFu7s");
    static STRUCT_IF_C C_BFu15i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu15i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i_BFu7s)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "C_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "C_BFu15i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu7s, C_BFu15i_BFu7s)
//============================================================================


struct  C_BFu15i_BFu8c  {
  char v1;
  unsigned int v2:15;
  unsigned char v3:8;
};
//SIG(1 C_BFu15i_BFu8c) C1{ Fc Fi:15 Fc:8}



static void Test_C_BFu15i_BFu8c()
{
  {
    init_simple_test("C_BFu15i_BFu8c");
    static STRUCT_IF_C C_BFu15i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu15i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i_BFu8c)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "C_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "C_BFu15i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu8c, C_BFu15i_BFu8c)
//============================================================================


struct  C_BFu15i_BFu8i  {
  char v1;
  unsigned int v2:15;
  unsigned int v3:8;
};
//SIG(1 C_BFu15i_BFu8i) C1{ Fc Fi:15 Fi:8}



static void Test_C_BFu15i_BFu8i()
{
  {
    init_simple_test("C_BFu15i_BFu8i");
    static STRUCT_IF_C C_BFu15i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu15i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i_BFu8i)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "C_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "C_BFu15i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu8i, C_BFu15i_BFu8i)
//============================================================================


struct  C_BFu15i_BFu8ll  {
  char v1;
  unsigned int v2:15;
  __tsu64 v3:8;
};
//SIG(1 C_BFu15i_BFu8ll) C1{ Fc Fi:15 FL:8}



static void Test_C_BFu15i_BFu8ll()
{
  {
    init_simple_test("C_BFu15i_BFu8ll");
    static STRUCT_IF_C C_BFu15i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15i_BFu8ll)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "C_BFu15i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "C_BFu15i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu8ll, C_BFu15i_BFu8ll)
//============================================================================


struct  C_BFu15i_BFu8s  {
  char v1;
  unsigned int v2:15;
  unsigned short v3:8;
};
//SIG(1 C_BFu15i_BFu8s) C1{ Fc Fi:15 Fs:8}



static void Test_C_BFu15i_BFu8s()
{
  {
    init_simple_test("C_BFu15i_BFu8s");
    static STRUCT_IF_C C_BFu15i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu15i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i_BFu8s)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "C_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "C_BFu15i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu8s, C_BFu15i_BFu8s)
//============================================================================


struct  C_BFu15i_BFu9i  {
  char v1;
  unsigned int v2:15;
  unsigned int v3:9;
};
//SIG(1 C_BFu15i_BFu9i) C1{ Fc Fi:15 Fi:9}



static void Test_C_BFu15i_BFu9i()
{
  {
    init_simple_test("C_BFu15i_BFu9i");
    static STRUCT_IF_C C_BFu15i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu15i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i_BFu9i)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "C_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "C_BFu15i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu9i, C_BFu15i_BFu9i)
//============================================================================


struct  C_BFu15i_BFu9ll  {
  char v1;
  unsigned int v2:15;
  __tsu64 v3:9;
};
//SIG(1 C_BFu15i_BFu9ll) C1{ Fc Fi:15 FL:9}



static void Test_C_BFu15i_BFu9ll()
{
  {
    init_simple_test("C_BFu15i_BFu9ll");
    static STRUCT_IF_C C_BFu15i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15i_BFu9ll)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "C_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "C_BFu15i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu9ll, C_BFu15i_BFu9ll)
//============================================================================


struct  C_BFu15i_BFu9s  {
  char v1;
  unsigned int v2:15;
  unsigned short v3:9;
};
//SIG(1 C_BFu15i_BFu9s) C1{ Fc Fi:15 Fs:9}



static void Test_C_BFu15i_BFu9s()
{
  {
    init_simple_test("C_BFu15i_BFu9s");
    static STRUCT_IF_C C_BFu15i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu15i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i_BFu9s)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "C_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "C_BFu15i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu9s, C_BFu15i_BFu9s)
//============================================================================


struct  C_BFu15i_C  {
  char v1;
  unsigned int v2:15;
  char v3;
};
//SIG(1 C_BFu15i_C) C1{ Fc Fi:15 Fc}



static void Test_C_BFu15i_C()
{
  {
    init_simple_test("C_BFu15i_C");
    static STRUCT_IF_C C_BFu15i_C lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu15i_C)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i_C)");
    check_field_offset(lv, v1, 0, "C_BFu15i_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_C");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_C");
    check_field_offset(lv, v3, 3, "C_BFu15i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_C, C_BFu15i_C)
//============================================================================


struct  C_BFu15i_D  {
  char v1;
  unsigned int v2:15;
  double v3;
};
//SIG(1 C_BFu15i_D) C1{ Fc Fi:15 FL}



static void Test_C_BFu15i_D()
{
  {
    init_simple_test("C_BFu15i_D");
    static STRUCT_IF_C C_BFu15i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu15i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15i_D)");
    check_field_offset(lv, v1, 0, "C_BFu15i_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_D");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu15i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_D, C_BFu15i_D)
//============================================================================


struct  C_BFu15i_F  {
  char v1;
  unsigned int v2:15;
  float v3;
};
//SIG(1 C_BFu15i_F) C1{ Fc Fi:15 Fi}



static void Test_C_BFu15i_F()
{
  {
    init_simple_test("C_BFu15i_F");
    static STRUCT_IF_C C_BFu15i_F lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15i_F)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i_F)");
    check_field_offset(lv, v1, 0, "C_BFu15i_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_F");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_F");
    check_field_offset(lv, v3, 4, "C_BFu15i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_F, C_BFu15i_F)
//============================================================================


struct  C_BFu15i_I  {
  char v1;
  unsigned int v2:15;
  int v3;
};
//SIG(1 C_BFu15i_I) C1{ Fc Fi:15 Fi}



static void Test_C_BFu15i_I()
{
  {
    init_simple_test("C_BFu15i_I");
    static STRUCT_IF_C C_BFu15i_I lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15i_I)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i_I)");
    check_field_offset(lv, v1, 0, "C_BFu15i_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_I");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_I");
    check_field_offset(lv, v3, 4, "C_BFu15i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_I, C_BFu15i_I)
//============================================================================


struct  C_BFu15i_Ip  {
  char v1;
  unsigned int v2:15;
  int *v3;
};
//SIG(1 C_BFu15i_Ip) C1{ Fc Fi:15 Fp}



static void Test_C_BFu15i_Ip()
{
  {
    init_simple_test("C_BFu15i_Ip");
    static STRUCT_IF_C C_BFu15i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu15i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15i_Ip)");
    check_field_offset(lv, v1, 0, "C_BFu15i_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_Ip");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu15i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_Ip, C_BFu15i_Ip)
//============================================================================


struct  C_BFu15i_L  {
  char v1;
  unsigned int v2:15;
  __tsi64 v3;
};
//SIG(1 C_BFu15i_L) C1{ Fc Fi:15 FL}



static void Test_C_BFu15i_L()
{
  {
    init_simple_test("C_BFu15i_L");
    static STRUCT_IF_C C_BFu15i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu15i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15i_L)");
    check_field_offset(lv, v1, 0, "C_BFu15i_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_L");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu15i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_L, C_BFu15i_L)
//============================================================================


struct  C_BFu15i_S  {
  char v1;
  unsigned int v2:15;
  short v3;
};
//SIG(1 C_BFu15i_S) C1{ Fc Fi:15 Fs}



static void Test_C_BFu15i_S()
{
  {
    init_simple_test("C_BFu15i_S");
    static STRUCT_IF_C C_BFu15i_S lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15i_S)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i_S)");
    check_field_offset(lv, v1, 0, "C_BFu15i_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_S");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_S");
    check_field_offset(lv, v3, 4, "C_BFu15i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_S, C_BFu15i_S)
//============================================================================


struct  C_BFu15i_Uc  {
  char v1;
  unsigned int v2:15;
  unsigned char v3;
};
//SIG(1 C_BFu15i_Uc) C1{ Fc Fi:15 Fc}



static void Test_C_BFu15i_Uc()
{
  {
    init_simple_test("C_BFu15i_Uc");
    static STRUCT_IF_C C_BFu15i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu15i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i_Uc)");
    check_field_offset(lv, v1, 0, "C_BFu15i_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_Uc");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_Uc");
    check_field_offset(lv, v3, 3, "C_BFu15i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_Uc, C_BFu15i_Uc)
//============================================================================


struct  C_BFu15i_Ui  {
  char v1;
  unsigned int v2:15;
  unsigned int v3;
};
//SIG(1 C_BFu15i_Ui) C1{ Fc Fi:15 Fi}



static void Test_C_BFu15i_Ui()
{
  {
    init_simple_test("C_BFu15i_Ui");
    static STRUCT_IF_C C_BFu15i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i_Ui)");
    check_field_offset(lv, v1, 0, "C_BFu15i_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_Ui");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_Ui");
    check_field_offset(lv, v3, 4, "C_BFu15i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_Ui, C_BFu15i_Ui)
//============================================================================


struct  C_BFu15i_Ul  {
  char v1;
  unsigned int v2:15;
  __tsu64 v3;
};
//SIG(1 C_BFu15i_Ul) C1{ Fc Fi:15 FL}



static void Test_C_BFu15i_Ul()
{
  {
    init_simple_test("C_BFu15i_Ul");
    static STRUCT_IF_C C_BFu15i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu15i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15i_Ul)");
    check_field_offset(lv, v1, 0, "C_BFu15i_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_Ul");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu15i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_Ul, C_BFu15i_Ul)
//============================================================================


struct  C_BFu15i_Us  {
  char v1;
  unsigned int v2:15;
  unsigned short v3;
};
//SIG(1 C_BFu15i_Us) C1{ Fc Fi:15 Fs}



static void Test_C_BFu15i_Us()
{
  {
    init_simple_test("C_BFu15i_Us");
    static STRUCT_IF_C C_BFu15i_Us lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i_Us)");
    check_field_offset(lv, v1, 0, "C_BFu15i_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_Us");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_Us");
    check_field_offset(lv, v3, 4, "C_BFu15i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_Us, C_BFu15i_Us)
//============================================================================


struct  C_BFu15i_Vp  {
  char v1;
  unsigned int v2:15;
  void *v3;
};
//SIG(1 C_BFu15i_Vp) C1{ Fc Fi:15 Fp}



static void Test_C_BFu15i_Vp()
{
  {
    init_simple_test("C_BFu15i_Vp");
    static STRUCT_IF_C C_BFu15i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu15i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15i_Vp)");
    check_field_offset(lv, v1, 0, "C_BFu15i_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_Vp");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu15i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_Vp, C_BFu15i_Vp)
//============================================================================


struct  C_BFu15ll  {
  char v1;
  __tsu64 v2:15;
};
//SIG(1 C_BFu15ll) C1{ Fc FL:15}



static void Test_C_BFu15ll()
{
  {
    init_simple_test("C_BFu15ll");
    static STRUCT_IF_C C_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll)");
    check_field_offset(lv, v1, 0, "C_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll, C_BFu15ll)
//============================================================================


struct  C_BFu15ll_BFu15i  {
  char v1;
  __tsu64 v2:15;
  unsigned int v3:15;
};
//SIG(1 C_BFu15ll_BFu15i) C1{ Fc FL:15 Fi:15}



static void Test_C_BFu15ll_BFu15i()
{
  {
    init_simple_test("C_BFu15ll_BFu15i");
    static STRUCT_IF_C C_BFu15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu15i)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "C_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu15i, C_BFu15ll_BFu15i)
//============================================================================


struct  C_BFu15ll_BFu15ll  {
  char v1;
  __tsu64 v2:15;
  __tsu64 v3:15;
};
//SIG(1 C_BFu15ll_BFu15ll) C1{ Fc FL:15 FL:15}



static void Test_C_BFu15ll_BFu15ll()
{
  {
    init_simple_test("C_BFu15ll_BFu15ll");
    static STRUCT_IF_C C_BFu15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, 1, "C_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu15ll, C_BFu15ll_BFu15ll)
//============================================================================


struct  C_BFu15ll_BFu15s  {
  char v1;
  __tsu64 v2:15;
  unsigned short v3:15;
};
//SIG(1 C_BFu15ll_BFu15s) C1{ Fc FL:15 Fs:15}



static void Test_C_BFu15ll_BFu15s()
{
  {
    init_simple_test("C_BFu15ll_BFu15s");
    static STRUCT_IF_C C_BFu15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu15s)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "C_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu15s, C_BFu15ll_BFu15s)
//============================================================================


struct  C_BFu15ll_BFu16i  {
  char v1;
  __tsu64 v2:15;
  unsigned int v3:16;
};
//SIG(1 C_BFu15ll_BFu16i) C1{ Fc FL:15 Fi:16}



static void Test_C_BFu15ll_BFu16i()
{
  {
    init_simple_test("C_BFu15ll_BFu16i");
    static STRUCT_IF_C C_BFu15ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu16i)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "C_BFu15ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "C_BFu15ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu16i, C_BFu15ll_BFu16i)
//============================================================================


struct  C_BFu15ll_BFu16ll  {
  char v1;
  __tsu64 v2:15;
  __tsu64 v3:16;
};
//SIG(1 C_BFu15ll_BFu16ll) C1{ Fc FL:15 FL:16}



static void Test_C_BFu15ll_BFu16ll()
{
  {
    init_simple_test("C_BFu15ll_BFu16ll");
    static STRUCT_IF_C C_BFu15ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, 1, "C_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, hide_ull(1LL<<15), "C_BFu15ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu16ll, C_BFu15ll_BFu16ll)
//============================================================================


struct  C_BFu15ll_BFu16s  {
  char v1;
  __tsu64 v2:15;
  unsigned short v3:16;
};
//SIG(1 C_BFu15ll_BFu16s) C1{ Fc FL:15 Fs:16}



static void Test_C_BFu15ll_BFu16s()
{
  {
    init_simple_test("C_BFu15ll_BFu16s");
    static STRUCT_IF_C C_BFu15ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu16s)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "C_BFu15ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "C_BFu15ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu16s, C_BFu15ll_BFu16s)
//============================================================================


struct  C_BFu15ll_BFu17i  {
  char v1;
  __tsu64 v2:15;
  unsigned int v3:17;
};
//SIG(1 C_BFu15ll_BFu17i) C1{ Fc FL:15 Fi:17}



static void Test_C_BFu15ll_BFu17i()
{
  {
    init_simple_test("C_BFu15ll_BFu17i");
    static STRUCT_IF_C C_BFu15ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu17i)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "C_BFu15ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "C_BFu15ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu17i, C_BFu15ll_BFu17i)
//============================================================================


struct  C_BFu15ll_BFu17ll  {
  char v1;
  __tsu64 v2:15;
  __tsu64 v3:17;
};
//SIG(1 C_BFu15ll_BFu17ll) C1{ Fc FL:15 FL:17}



static void Test_C_BFu15ll_BFu17ll()
{
  {
    init_simple_test("C_BFu15ll_BFu17ll");
    static STRUCT_IF_C C_BFu15ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, 1, "C_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, hide_ull(1LL<<16), "C_BFu15ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu17ll, C_BFu15ll_BFu17ll)
//============================================================================


struct  C_BFu15ll_BFu1c  {
  char v1;
  __tsu64 v2:15;
  unsigned char v3:1;
};
//SIG(1 C_BFu15ll_BFu1c) C1{ Fc FL:15 Fc:1}



static void Test_C_BFu15ll_BFu1c()
{
  {
    init_simple_test("C_BFu15ll_BFu1c");
    static STRUCT_IF_C C_BFu15ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu1c)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu1c");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "C_BFu15ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu1c, C_BFu15ll_BFu1c)
//============================================================================


struct  C_BFu15ll_BFu1i  {
  char v1;
  __tsu64 v2:15;
  unsigned int v3:1;
};
//SIG(1 C_BFu15ll_BFu1i) C1{ Fc FL:15 Fi:1}



static void Test_C_BFu15ll_BFu1i()
{
  {
    init_simple_test("C_BFu15ll_BFu1i");
    static STRUCT_IF_C C_BFu15ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu1i)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu1i");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "C_BFu15ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu1i, C_BFu15ll_BFu1i)
//============================================================================


struct  C_BFu15ll_BFu1ll  {
  char v1;
  __tsu64 v2:15;
  __tsu64 v3:1;
};
//SIG(1 C_BFu15ll_BFu1ll) C1{ Fc FL:15 FL:1}



static void Test_C_BFu15ll_BFu1ll()
{
  {
    init_simple_test("C_BFu15ll_BFu1ll");
    static STRUCT_IF_C C_BFu15ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "C_BFu15ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu1ll, C_BFu15ll_BFu1ll)
//============================================================================


struct  C_BFu15ll_BFu1s  {
  char v1;
  __tsu64 v2:15;
  unsigned short v3:1;
};
//SIG(1 C_BFu15ll_BFu1s) C1{ Fc FL:15 Fs:1}



static void Test_C_BFu15ll_BFu1s()
{
  {
    init_simple_test("C_BFu15ll_BFu1s");
    static STRUCT_IF_C C_BFu15ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu1s)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu1s");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "C_BFu15ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu1s, C_BFu15ll_BFu1s)
//============================================================================


struct  C_BFu15ll_BFu31i  {
  char v1;
  __tsu64 v2:15;
  unsigned int v3:31;
};
//SIG(1 C_BFu15ll_BFu31i) C1{ Fc FL:15 Fi:31}



static void Test_C_BFu15ll_BFu31i()
{
  {
    init_simple_test("C_BFu15ll_BFu31i");
    static STRUCT_IF_C C_BFu15ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu31i)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "C_BFu15ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "C_BFu15ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu31i, C_BFu15ll_BFu31i)
//============================================================================


struct  C_BFu15ll_BFu31ll  {
  char v1;
  __tsu64 v2:15;
  __tsu64 v3:31;
};
//SIG(1 C_BFu15ll_BFu31ll) C1{ Fc FL:15 FL:31}



static void Test_C_BFu15ll_BFu31ll()
{
  {
    init_simple_test("C_BFu15ll_BFu31ll");
    static STRUCT_IF_C C_BFu15ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, 1, "C_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, hide_ull(1LL<<30), "C_BFu15ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu31ll, C_BFu15ll_BFu31ll)
//============================================================================


struct  C_BFu15ll_BFu32i  {
  char v1;
  __tsu64 v2:15;
  unsigned int v3:32;
};
//SIG(1 C_BFu15ll_BFu32i) C1{ Fc FL:15 Fi:32}



static void Test_C_BFu15ll_BFu32i()
{
  {
    init_simple_test("C_BFu15ll_BFu32i");
    static STRUCT_IF_C C_BFu15ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu32i)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "C_BFu15ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "C_BFu15ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu32i, C_BFu15ll_BFu32i)
//============================================================================


struct  C_BFu15ll_BFu32ll  {
  char v1;
  __tsu64 v2:15;
  __tsu64 v3:32;
};
//SIG(1 C_BFu15ll_BFu32ll) C1{ Fc FL:15 FL:32}



static void Test_C_BFu15ll_BFu32ll()
{
  {
    init_simple_test("C_BFu15ll_BFu32ll");
    static STRUCT_IF_C C_BFu15ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, 1, "C_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, hide_ull(1LL<<31), "C_BFu15ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu32ll, C_BFu15ll_BFu32ll)
//============================================================================


struct  C_BFu15ll_BFu33  {
  char v1;
  __tsu64 v2:15;
  __tsu64 v3:33;
};
//SIG(1 C_BFu15ll_BFu33) C1{ Fc FL:15 FL:33}



static void Test_C_BFu15ll_BFu33()
{
  {
    init_simple_test("C_BFu15ll_BFu33");
    static STRUCT_IF_C C_BFu15ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu33)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, 1, "C_BFu15ll_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, hide_ull(1LL<<32), "C_BFu15ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu33, C_BFu15ll_BFu33)
//============================================================================


struct  C_BFu15ll_BFu7c  {
  char v1;
  __tsu64 v2:15;
  unsigned char v3:7;
};
//SIG(1 C_BFu15ll_BFu7c) C1{ Fc FL:15 Fc:7}



static void Test_C_BFu15ll_BFu7c()
{
  {
    init_simple_test("C_BFu15ll_BFu7c");
    static STRUCT_IF_C C_BFu15ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu7c)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "C_BFu15ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "C_BFu15ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu7c, C_BFu15ll_BFu7c)
//============================================================================


struct  C_BFu15ll_BFu7i  {
  char v1;
  __tsu64 v2:15;
  unsigned int v3:7;
};
//SIG(1 C_BFu15ll_BFu7i) C1{ Fc FL:15 Fi:7}



static void Test_C_BFu15ll_BFu7i()
{
  {
    init_simple_test("C_BFu15ll_BFu7i");
    static STRUCT_IF_C C_BFu15ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu7i)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "C_BFu15ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "C_BFu15ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu7i, C_BFu15ll_BFu7i)
//============================================================================


struct  C_BFu15ll_BFu7ll  {
  char v1;
  __tsu64 v2:15;
  __tsu64 v3:7;
};
//SIG(1 C_BFu15ll_BFu7ll) C1{ Fc FL:15 FL:7}



static void Test_C_BFu15ll_BFu7ll()
{
  {
    init_simple_test("C_BFu15ll_BFu7ll");
    static STRUCT_IF_C C_BFu15ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "C_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "C_BFu15ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu7ll, C_BFu15ll_BFu7ll)
//============================================================================


struct  C_BFu15ll_BFu7s  {
  char v1;
  __tsu64 v2:15;
  unsigned short v3:7;
};
//SIG(1 C_BFu15ll_BFu7s) C1{ Fc FL:15 Fs:7}



static void Test_C_BFu15ll_BFu7s()
{
  {
    init_simple_test("C_BFu15ll_BFu7s");
    static STRUCT_IF_C C_BFu15ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu7s)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "C_BFu15ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "C_BFu15ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu7s, C_BFu15ll_BFu7s)
//============================================================================


struct  C_BFu15ll_BFu8c  {
  char v1;
  __tsu64 v2:15;
  unsigned char v3:8;
};
//SIG(1 C_BFu15ll_BFu8c) C1{ Fc FL:15 Fc:8}



static void Test_C_BFu15ll_BFu8c()
{
  {
    init_simple_test("C_BFu15ll_BFu8c");
    static STRUCT_IF_C C_BFu15ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu8c)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "C_BFu15ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "C_BFu15ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu8c, C_BFu15ll_BFu8c)
//============================================================================


struct  C_BFu15ll_BFu8i  {
  char v1;
  __tsu64 v2:15;
  unsigned int v3:8;
};
//SIG(1 C_BFu15ll_BFu8i) C1{ Fc FL:15 Fi:8}



static void Test_C_BFu15ll_BFu8i()
{
  {
    init_simple_test("C_BFu15ll_BFu8i");
    static STRUCT_IF_C C_BFu15ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu8i)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "C_BFu15ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "C_BFu15ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu8i, C_BFu15ll_BFu8i)
//============================================================================


struct  C_BFu15ll_BFu8ll  {
  char v1;
  __tsu64 v2:15;
  __tsu64 v3:8;
};
//SIG(1 C_BFu15ll_BFu8ll) C1{ Fc FL:15 FL:8}



static void Test_C_BFu15ll_BFu8ll()
{
  {
    init_simple_test("C_BFu15ll_BFu8ll");
    static STRUCT_IF_C C_BFu15ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "C_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "C_BFu15ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu8ll, C_BFu15ll_BFu8ll)
//============================================================================


struct  C_BFu15ll_BFu8s  {
  char v1;
  __tsu64 v2:15;
  unsigned short v3:8;
};
//SIG(1 C_BFu15ll_BFu8s) C1{ Fc FL:15 Fs:8}



static void Test_C_BFu15ll_BFu8s()
{
  {
    init_simple_test("C_BFu15ll_BFu8s");
    static STRUCT_IF_C C_BFu15ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu8s)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "C_BFu15ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "C_BFu15ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu8s, C_BFu15ll_BFu8s)
//============================================================================


struct  C_BFu15ll_BFu9i  {
  char v1;
  __tsu64 v2:15;
  unsigned int v3:9;
};
//SIG(1 C_BFu15ll_BFu9i) C1{ Fc FL:15 Fi:9}



static void Test_C_BFu15ll_BFu9i()
{
  {
    init_simple_test("C_BFu15ll_BFu9i");
    static STRUCT_IF_C C_BFu15ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu9i)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "C_BFu15ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "C_BFu15ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu9i, C_BFu15ll_BFu9i)
//============================================================================


struct  C_BFu15ll_BFu9ll  {
  char v1;
  __tsu64 v2:15;
  __tsu64 v3:9;
};
//SIG(1 C_BFu15ll_BFu9ll) C1{ Fc FL:15 FL:9}



static void Test_C_BFu15ll_BFu9ll()
{
  {
    init_simple_test("C_BFu15ll_BFu9ll");
    static STRUCT_IF_C C_BFu15ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "C_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "C_BFu15ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu9ll, C_BFu15ll_BFu9ll)
//============================================================================


struct  C_BFu15ll_BFu9s  {
  char v1;
  __tsu64 v2:15;
  unsigned short v3:9;
};
//SIG(1 C_BFu15ll_BFu9s) C1{ Fc FL:15 Fs:9}



static void Test_C_BFu15ll_BFu9s()
{
  {
    init_simple_test("C_BFu15ll_BFu9s");
    static STRUCT_IF_C C_BFu15ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu9s)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "C_BFu15ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "C_BFu15ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu9s, C_BFu15ll_BFu9s)
//============================================================================


struct  C_BFu15ll_C  {
  char v1;
  __tsu64 v2:15;
  char v3;
};
//SIG(1 C_BFu15ll_C) C1{ Fc FL:15 Fc}



static void Test_C_BFu15ll_C()
{
  {
    init_simple_test("C_BFu15ll_C");
    static STRUCT_IF_C C_BFu15ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_C)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_C");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_C");
    check_field_offset(lv, v3, 3, "C_BFu15ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_C, C_BFu15ll_C)
//============================================================================


struct  C_BFu15ll_D  {
  char v1;
  __tsu64 v2:15;
  double v3;
};
//SIG(1 C_BFu15ll_D) C1{ Fc FL:15 FL}



static void Test_C_BFu15ll_D()
{
  {
    init_simple_test("C_BFu15ll_D");
    static STRUCT_IF_C C_BFu15ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu15ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_D)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_D");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu15ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_D, C_BFu15ll_D)
//============================================================================


struct  C_BFu15ll_F  {
  char v1;
  __tsu64 v2:15;
  float v3;
};
//SIG(1 C_BFu15ll_F) C1{ Fc FL:15 Fi}



static void Test_C_BFu15ll_F()
{
  {
    init_simple_test("C_BFu15ll_F");
    static STRUCT_IF_C C_BFu15ll_F lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_F)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_F");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_F");
    check_field_offset(lv, v3, 4, "C_BFu15ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_F, C_BFu15ll_F)
//============================================================================


struct  C_BFu15ll_I  {
  char v1;
  __tsu64 v2:15;
  int v3;
};
//SIG(1 C_BFu15ll_I) C1{ Fc FL:15 Fi}



static void Test_C_BFu15ll_I()
{
  {
    init_simple_test("C_BFu15ll_I");
    static STRUCT_IF_C C_BFu15ll_I lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_I)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_I");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_I");
    check_field_offset(lv, v3, 4, "C_BFu15ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_I, C_BFu15ll_I)
//============================================================================


struct  C_BFu15ll_Ip  {
  char v1;
  __tsu64 v2:15;
  int *v3;
};
//SIG(1 C_BFu15ll_Ip) C1{ Fc FL:15 Fp}



static void Test_C_BFu15ll_Ip()
{
  {
    init_simple_test("C_BFu15ll_Ip");
    static STRUCT_IF_C C_BFu15ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu15ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_Ip)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_Ip");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu15ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_Ip, C_BFu15ll_Ip)
//============================================================================


struct  C_BFu15ll_L  {
  char v1;
  __tsu64 v2:15;
  __tsi64 v3;
};
//SIG(1 C_BFu15ll_L) C1{ Fc FL:15 FL}



static void Test_C_BFu15ll_L()
{
  {
    init_simple_test("C_BFu15ll_L");
    static STRUCT_IF_C C_BFu15ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu15ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_L)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_L");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu15ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_L, C_BFu15ll_L)
//============================================================================


struct  C_BFu15ll_S  {
  char v1;
  __tsu64 v2:15;
  short v3;
};
//SIG(1 C_BFu15ll_S) C1{ Fc FL:15 Fs}



static void Test_C_BFu15ll_S()
{
  {
    init_simple_test("C_BFu15ll_S");
    static STRUCT_IF_C C_BFu15ll_S lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_S)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_S");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_S");
    check_field_offset(lv, v3, 4, "C_BFu15ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_S, C_BFu15ll_S)
//============================================================================


struct  C_BFu15ll_Uc  {
  char v1;
  __tsu64 v2:15;
  unsigned char v3;
};
//SIG(1 C_BFu15ll_Uc) C1{ Fc FL:15 Fc}



static void Test_C_BFu15ll_Uc()
{
  {
    init_simple_test("C_BFu15ll_Uc");
    static STRUCT_IF_C C_BFu15ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_Uc)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_Uc");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_Uc");
    check_field_offset(lv, v3, 3, "C_BFu15ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_Uc, C_BFu15ll_Uc)
//============================================================================


struct  C_BFu15ll_Ui  {
  char v1;
  __tsu64 v2:15;
  unsigned int v3;
};
//SIG(1 C_BFu15ll_Ui) C1{ Fc FL:15 Fi}



static void Test_C_BFu15ll_Ui()
{
  {
    init_simple_test("C_BFu15ll_Ui");
    static STRUCT_IF_C C_BFu15ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_Ui)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_Ui");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_Ui");
    check_field_offset(lv, v3, 4, "C_BFu15ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_Ui, C_BFu15ll_Ui)
//============================================================================


struct  C_BFu15ll_Ul  {
  char v1;
  __tsu64 v2:15;
  __tsu64 v3;
};
//SIG(1 C_BFu15ll_Ul) C1{ Fc FL:15 FL}



static void Test_C_BFu15ll_Ul()
{
  {
    init_simple_test("C_BFu15ll_Ul");
    static STRUCT_IF_C C_BFu15ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu15ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_Ul)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_Ul");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu15ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_Ul, C_BFu15ll_Ul)
//============================================================================


struct  C_BFu15ll_Us  {
  char v1;
  __tsu64 v2:15;
  unsigned short v3;
};
//SIG(1 C_BFu15ll_Us) C1{ Fc FL:15 Fs}



static void Test_C_BFu15ll_Us()
{
  {
    init_simple_test("C_BFu15ll_Us");
    static STRUCT_IF_C C_BFu15ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_Us)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_Us");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_Us");
    check_field_offset(lv, v3, 4, "C_BFu15ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_Us, C_BFu15ll_Us)
//============================================================================


struct  C_BFu15ll_Vp  {
  char v1;
  __tsu64 v2:15;
  void *v3;
};
//SIG(1 C_BFu15ll_Vp) C1{ Fc FL:15 Fp}



static void Test_C_BFu15ll_Vp()
{
  {
    init_simple_test("C_BFu15ll_Vp");
    static STRUCT_IF_C C_BFu15ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu15ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_Vp)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_Vp");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu15ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_Vp, C_BFu15ll_Vp)
//============================================================================


struct  C_BFu15s  {
  char v1;
  unsigned short v2:15;
};
//SIG(1 C_BFu15s) C1{ Fc Fs:15}



static void Test_C_BFu15s()
{
  {
    init_simple_test("C_BFu15s");
    static STRUCT_IF_C C_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu15s)");
    check_field_offset(lv, v1, 0, "C_BFu15s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s, C_BFu15s)
//============================================================================


struct  C_BFu15s_BFu15i  {
  char v1;
  unsigned short v2:15;
  unsigned int v3:15;
};
//SIG(1 C_BFu15s_BFu15i) C1{ Fc Fs:15 Fi:15}



static void Test_C_BFu15s_BFu15i()
{
  {
    init_simple_test("C_BFu15s_BFu15i");
    static STRUCT_IF_C C_BFu15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15s_BFu15i)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu15i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "C_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu15i, C_BFu15s_BFu15i)
//============================================================================


struct  C_BFu15s_BFu15ll  {
  char v1;
  unsigned short v2:15;
  __tsu64 v3:15;
};
//SIG(1 C_BFu15s_BFu15ll) C1{ Fc Fs:15 FL:15}



static void Test_C_BFu15s_BFu15ll()
{
  {
    init_simple_test("C_BFu15s_BFu15ll");
    static STRUCT_IF_C C_BFu15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15s_BFu15ll)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "C_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "C_BFu15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu15ll, C_BFu15s_BFu15ll)
//============================================================================


struct  C_BFu15s_BFu15s  {
  char v1;
  unsigned short v2:15;
  unsigned short v3:15;
};
//SIG(1 C_BFu15s_BFu15s) C1{ Fc Fs:15 Fs:15}



static void Test_C_BFu15s_BFu15s()
{
  {
    init_simple_test("C_BFu15s_BFu15s");
    static STRUCT_IF_C C_BFu15s_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(C_BFu15s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu15s_BFu15s)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu15s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "C_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu15s, C_BFu15s_BFu15s)
//============================================================================


struct  C_BFu15s_BFu16i  {
  char v1;
  unsigned short v2:15;
  unsigned int v3:16;
};
//SIG(1 C_BFu15s_BFu16i) C1{ Fc Fs:15 Fi:16}



static void Test_C_BFu15s_BFu16i()
{
  {
    init_simple_test("C_BFu15s_BFu16i");
    static STRUCT_IF_C C_BFu15s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15s_BFu16i)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu16i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "C_BFu15s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "C_BFu15s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu16i, C_BFu15s_BFu16i)
//============================================================================


struct  C_BFu15s_BFu16ll  {
  char v1;
  unsigned short v2:15;
  __tsu64 v3:16;
};
//SIG(1 C_BFu15s_BFu16ll) C1{ Fc Fs:15 FL:16}



static void Test_C_BFu15s_BFu16ll()
{
  {
    init_simple_test("C_BFu15s_BFu16ll");
    static STRUCT_IF_C C_BFu15s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15s_BFu16ll)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, 1, "C_BFu15s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, hide_ull(1LL<<15), "C_BFu15s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu16ll, C_BFu15s_BFu16ll)
//============================================================================


struct  C_BFu15s_BFu16s  {
  char v1;
  unsigned short v2:15;
  unsigned short v3:16;
};
//SIG(1 C_BFu15s_BFu16s) C1{ Fc Fs:15 Fs:16}



static void Test_C_BFu15s_BFu16s()
{
  {
    init_simple_test("C_BFu15s_BFu16s");
    static STRUCT_IF_C C_BFu15s_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(C_BFu15s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu15s_BFu16s)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu16s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "C_BFu15s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "C_BFu15s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu16s, C_BFu15s_BFu16s)
//============================================================================


struct  C_BFu15s_BFu17i  {
  char v1;
  unsigned short v2:15;
  unsigned int v3:17;
};
//SIG(1 C_BFu15s_BFu17i) C1{ Fc Fs:15 Fi:17}



static void Test_C_BFu15s_BFu17i()
{
  {
    init_simple_test("C_BFu15s_BFu17i");
    static STRUCT_IF_C C_BFu15s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15s_BFu17i)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu17i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "C_BFu15s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "C_BFu15s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu17i, C_BFu15s_BFu17i)
//============================================================================


struct  C_BFu15s_BFu17ll  {
  char v1;
  unsigned short v2:15;
  __tsu64 v3:17;
};
//SIG(1 C_BFu15s_BFu17ll) C1{ Fc Fs:15 FL:17}



static void Test_C_BFu15s_BFu17ll()
{
  {
    init_simple_test("C_BFu15s_BFu17ll");
    static STRUCT_IF_C C_BFu15s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15s_BFu17ll)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, 1, "C_BFu15s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, hide_ull(1LL<<16), "C_BFu15s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu17ll, C_BFu15s_BFu17ll)
//============================================================================


struct  C_BFu15s_BFu1c  {
  char v1;
  unsigned short v2:15;
  unsigned char v3:1;
};
//SIG(1 C_BFu15s_BFu1c) C1{ Fc Fs:15 Fc:1}



static void Test_C_BFu15s_BFu1c()
{
  {
    init_simple_test("C_BFu15s_BFu1c");
    static STRUCT_IF_C C_BFu15s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu15s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu15s_BFu1c)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu1c.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu1c");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "C_BFu15s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu1c, C_BFu15s_BFu1c)
//============================================================================


struct  C_BFu15s_BFu1i  {
  char v1;
  unsigned short v2:15;
  unsigned int v3:1;
};
//SIG(1 C_BFu15s_BFu1i) C1{ Fc Fs:15 Fi:1}



static void Test_C_BFu15s_BFu1i()
{
  {
    init_simple_test("C_BFu15s_BFu1i");
    static STRUCT_IF_C C_BFu15s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu15s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15s_BFu1i)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu1i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu1i");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "C_BFu15s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu1i, C_BFu15s_BFu1i)
//============================================================================


struct  C_BFu15s_BFu1ll  {
  char v1;
  unsigned short v2:15;
  __tsu64 v3:1;
};
//SIG(1 C_BFu15s_BFu1ll) C1{ Fc Fs:15 FL:1}



static void Test_C_BFu15s_BFu1ll()
{
  {
    init_simple_test("C_BFu15s_BFu1ll");
    static STRUCT_IF_C C_BFu15s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15s_BFu1ll)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu1ll");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "C_BFu15s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu1ll, C_BFu15s_BFu1ll)
//============================================================================


struct  C_BFu15s_BFu1s  {
  char v1;
  unsigned short v2:15;
  unsigned short v3:1;
};
//SIG(1 C_BFu15s_BFu1s) C1{ Fc Fs:15 Fs:1}



static void Test_C_BFu15s_BFu1s()
{
  {
    init_simple_test("C_BFu15s_BFu1s");
    static STRUCT_IF_C C_BFu15s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu15s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu15s_BFu1s)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu1s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu1s");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "C_BFu15s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu1s, C_BFu15s_BFu1s)
//============================================================================


struct  C_BFu15s_BFu31i  {
  char v1;
  unsigned short v2:15;
  unsigned int v3:31;
};
//SIG(1 C_BFu15s_BFu31i) C1{ Fc Fs:15 Fi:31}



static void Test_C_BFu15s_BFu31i()
{
  {
    init_simple_test("C_BFu15s_BFu31i");
    static STRUCT_IF_C C_BFu15s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15s_BFu31i)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu31i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "C_BFu15s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "C_BFu15s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu31i, C_BFu15s_BFu31i)
//============================================================================


struct  C_BFu15s_BFu31ll  {
  char v1;
  unsigned short v2:15;
  __tsu64 v3:31;
};
//SIG(1 C_BFu15s_BFu31ll) C1{ Fc Fs:15 FL:31}



static void Test_C_BFu15s_BFu31ll()
{
  {
    init_simple_test("C_BFu15s_BFu31ll");
    static STRUCT_IF_C C_BFu15s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15s_BFu31ll)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, 1, "C_BFu15s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, hide_ull(1LL<<30), "C_BFu15s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu31ll, C_BFu15s_BFu31ll)
//============================================================================


struct  C_BFu15s_BFu32i  {
  char v1;
  unsigned short v2:15;
  unsigned int v3:32;
};
//SIG(1 C_BFu15s_BFu32i) C1{ Fc Fs:15 Fi:32}



static void Test_C_BFu15s_BFu32i()
{
  {
    init_simple_test("C_BFu15s_BFu32i");
    static STRUCT_IF_C C_BFu15s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15s_BFu32i)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu32i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "C_BFu15s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "C_BFu15s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu32i, C_BFu15s_BFu32i)
//============================================================================


struct  C_BFu15s_BFu32ll  {
  char v1;
  unsigned short v2:15;
  __tsu64 v3:32;
};
//SIG(1 C_BFu15s_BFu32ll) C1{ Fc Fs:15 FL:32}



static void Test_C_BFu15s_BFu32ll()
{
  {
    init_simple_test("C_BFu15s_BFu32ll");
    static STRUCT_IF_C C_BFu15s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15s_BFu32ll)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, 1, "C_BFu15s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, hide_ull(1LL<<31), "C_BFu15s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu32ll, C_BFu15s_BFu32ll)
//============================================================================


struct  C_BFu15s_BFu33  {
  char v1;
  unsigned short v2:15;
  __tsu64 v3:33;
};
//SIG(1 C_BFu15s_BFu33) C1{ Fc Fs:15 FL:33}



static void Test_C_BFu15s_BFu33()
{
  {
    init_simple_test("C_BFu15s_BFu33");
    static STRUCT_IF_C C_BFu15s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15s_BFu33)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu33.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, 1, "C_BFu15s_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, hide_ull(1LL<<32), "C_BFu15s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu33, C_BFu15s_BFu33)
//============================================================================


struct  C_BFu15s_BFu7c  {
  char v1;
  unsigned short v2:15;
  unsigned char v3:7;
};
//SIG(1 C_BFu15s_BFu7c) C1{ Fc Fs:15 Fc:7}



static void Test_C_BFu15s_BFu7c()
{
  {
    init_simple_test("C_BFu15s_BFu7c");
    static STRUCT_IF_C C_BFu15s_BFu7c lv;
    check2(sizeof(lv), 6, "sizeof(C_BFu15s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu15s_BFu7c)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu7c.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "C_BFu15s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "C_BFu15s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu7c, C_BFu15s_BFu7c)
//============================================================================


struct  C_BFu15s_BFu7i  {
  char v1;
  unsigned short v2:15;
  unsigned int v3:7;
};
//SIG(1 C_BFu15s_BFu7i) C1{ Fc Fs:15 Fi:7}



static void Test_C_BFu15s_BFu7i()
{
  {
    init_simple_test("C_BFu15s_BFu7i");
    static STRUCT_IF_C C_BFu15s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15s_BFu7i)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu7i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "C_BFu15s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "C_BFu15s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu7i, C_BFu15s_BFu7i)
//============================================================================


struct  C_BFu15s_BFu7ll  {
  char v1;
  unsigned short v2:15;
  __tsu64 v3:7;
};
//SIG(1 C_BFu15s_BFu7ll) C1{ Fc Fs:15 FL:7}



static void Test_C_BFu15s_BFu7ll()
{
  {
    init_simple_test("C_BFu15s_BFu7ll");
    static STRUCT_IF_C C_BFu15s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15s_BFu7ll)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, 1, "C_BFu15s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, hide_ull(1LL<<6), "C_BFu15s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu7ll, C_BFu15s_BFu7ll)
//============================================================================


struct  C_BFu15s_BFu7s  {
  char v1;
  unsigned short v2:15;
  unsigned short v3:7;
};
//SIG(1 C_BFu15s_BFu7s) C1{ Fc Fs:15 Fs:7}



static void Test_C_BFu15s_BFu7s()
{
  {
    init_simple_test("C_BFu15s_BFu7s");
    static STRUCT_IF_C C_BFu15s_BFu7s lv;
    check2(sizeof(lv), 6, "sizeof(C_BFu15s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu15s_BFu7s)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu7s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "C_BFu15s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "C_BFu15s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu7s, C_BFu15s_BFu7s)
//============================================================================


struct  C_BFu15s_BFu8c  {
  char v1;
  unsigned short v2:15;
  unsigned char v3:8;
};
//SIG(1 C_BFu15s_BFu8c) C1{ Fc Fs:15 Fc:8}



static void Test_C_BFu15s_BFu8c()
{
  {
    init_simple_test("C_BFu15s_BFu8c");
    static STRUCT_IF_C C_BFu15s_BFu8c lv;
    check2(sizeof(lv), 6, "sizeof(C_BFu15s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu15s_BFu8c)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu8c.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "C_BFu15s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "C_BFu15s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu8c, C_BFu15s_BFu8c)
//============================================================================


struct  C_BFu15s_BFu8i  {
  char v1;
  unsigned short v2:15;
  unsigned int v3:8;
};
//SIG(1 C_BFu15s_BFu8i) C1{ Fc Fs:15 Fi:8}



static void Test_C_BFu15s_BFu8i()
{
  {
    init_simple_test("C_BFu15s_BFu8i");
    static STRUCT_IF_C C_BFu15s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15s_BFu8i)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu8i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "C_BFu15s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "C_BFu15s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu8i, C_BFu15s_BFu8i)
//============================================================================


struct  C_BFu15s_BFu8ll  {
  char v1;
  unsigned short v2:15;
  __tsu64 v3:8;
};
//SIG(1 C_BFu15s_BFu8ll) C1{ Fc Fs:15 FL:8}



static void Test_C_BFu15s_BFu8ll()
{
  {
    init_simple_test("C_BFu15s_BFu8ll");
    static STRUCT_IF_C C_BFu15s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15s_BFu8ll)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, 1, "C_BFu15s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, hide_ull(1LL<<7), "C_BFu15s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu8ll, C_BFu15s_BFu8ll)
//============================================================================


struct  C_BFu15s_BFu8s  {
  char v1;
  unsigned short v2:15;
  unsigned short v3:8;
};
//SIG(1 C_BFu15s_BFu8s) C1{ Fc Fs:15 Fs:8}



static void Test_C_BFu15s_BFu8s()
{
  {
    init_simple_test("C_BFu15s_BFu8s");
    static STRUCT_IF_C C_BFu15s_BFu8s lv;
    check2(sizeof(lv), 6, "sizeof(C_BFu15s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu15s_BFu8s)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu8s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "C_BFu15s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "C_BFu15s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu8s, C_BFu15s_BFu8s)
//============================================================================


struct  C_BFu15s_BFu9i  {
  char v1;
  unsigned short v2:15;
  unsigned int v3:9;
};
//SIG(1 C_BFu15s_BFu9i) C1{ Fc Fs:15 Fi:9}



static void Test_C_BFu15s_BFu9i()
{
  {
    init_simple_test("C_BFu15s_BFu9i");
    static STRUCT_IF_C C_BFu15s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15s_BFu9i)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu9i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "C_BFu15s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "C_BFu15s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu9i, C_BFu15s_BFu9i)
//============================================================================


struct  C_BFu15s_BFu9ll  {
  char v1;
  unsigned short v2:15;
  __tsu64 v3:9;
};
//SIG(1 C_BFu15s_BFu9ll) C1{ Fc Fs:15 FL:9}



static void Test_C_BFu15s_BFu9ll()
{
  {
    init_simple_test("C_BFu15s_BFu9ll");
    static STRUCT_IF_C C_BFu15s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15s_BFu9ll)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, 1, "C_BFu15s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, hide_ull(1LL<<8), "C_BFu15s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu9ll, C_BFu15s_BFu9ll)
//============================================================================


struct  C_BFu15s_BFu9s  {
  char v1;
  unsigned short v2:15;
  unsigned short v3:9;
};
//SIG(1 C_BFu15s_BFu9s) C1{ Fc Fs:15 Fs:9}



static void Test_C_BFu15s_BFu9s()
{
  {
    init_simple_test("C_BFu15s_BFu9s");
    static STRUCT_IF_C C_BFu15s_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(C_BFu15s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu15s_BFu9s)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu9s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "C_BFu15s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "C_BFu15s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu9s, C_BFu15s_BFu9s)
//============================================================================


struct  C_BFu15s_C  {
  char v1;
  unsigned short v2:15;
  char v3;
};
//SIG(1 C_BFu15s_C) C1{ Fc Fs:15 Fc}



static void Test_C_BFu15s_C()
{
  {
    init_simple_test("C_BFu15s_C");
    static STRUCT_IF_C C_BFu15s_C lv;
    check2(sizeof(lv), 6, "sizeof(C_BFu15s_C)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu15s_C)");
    check_field_offset(lv, v1, 0, "C_BFu15s_C.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_C");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_C");
    check_field_offset(lv, v3, 4, "C_BFu15s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_C, C_BFu15s_C)
//============================================================================


struct  C_BFu15s_D  {
  char v1;
  unsigned short v2:15;
  double v3;
};
//SIG(1 C_BFu15s_D) C1{ Fc Fs:15 FL}



static void Test_C_BFu15s_D()
{
  {
    init_simple_test("C_BFu15s_D");
    static STRUCT_IF_C C_BFu15s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu15s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15s_D)");
    check_field_offset(lv, v1, 0, "C_BFu15s_D.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_D");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu15s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_D, C_BFu15s_D)
//============================================================================


struct  C_BFu15s_F  {
  char v1;
  unsigned short v2:15;
  float v3;
};
//SIG(1 C_BFu15s_F) C1{ Fc Fs:15 Fi}



static void Test_C_BFu15s_F()
{
  {
    init_simple_test("C_BFu15s_F");
    static STRUCT_IF_C C_BFu15s_F lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15s_F)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15s_F)");
    check_field_offset(lv, v1, 0, "C_BFu15s_F.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_F");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_F");
    check_field_offset(lv, v3, 4, "C_BFu15s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_F, C_BFu15s_F)
//============================================================================


struct  C_BFu15s_I  {
  char v1;
  unsigned short v2:15;
  int v3;
};
//SIG(1 C_BFu15s_I) C1{ Fc Fs:15 Fi}



static void Test_C_BFu15s_I()
{
  {
    init_simple_test("C_BFu15s_I");
    static STRUCT_IF_C C_BFu15s_I lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15s_I)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15s_I)");
    check_field_offset(lv, v1, 0, "C_BFu15s_I.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_I");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_I");
    check_field_offset(lv, v3, 4, "C_BFu15s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_I, C_BFu15s_I)
//============================================================================


struct  C_BFu15s_Ip  {
  char v1;
  unsigned short v2:15;
  int *v3;
};
//SIG(1 C_BFu15s_Ip) C1{ Fc Fs:15 Fp}



static void Test_C_BFu15s_Ip()
{
  {
    init_simple_test("C_BFu15s_Ip");
    static STRUCT_IF_C C_BFu15s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu15s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15s_Ip)");
    check_field_offset(lv, v1, 0, "C_BFu15s_Ip.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu15s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_Ip, C_BFu15s_Ip)
//============================================================================


struct  C_BFu15s_L  {
  char v1;
  unsigned short v2:15;
  __tsi64 v3;
};
//SIG(1 C_BFu15s_L) C1{ Fc Fs:15 FL}



static void Test_C_BFu15s_L()
{
  {
    init_simple_test("C_BFu15s_L");
    static STRUCT_IF_C C_BFu15s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu15s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15s_L)");
    check_field_offset(lv, v1, 0, "C_BFu15s_L.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_L");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu15s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_L, C_BFu15s_L)
//============================================================================


struct  C_BFu15s_S  {
  char v1;
  unsigned short v2:15;
  short v3;
};
//SIG(1 C_BFu15s_S) C1{ Fc Fs:15 Fs}



static void Test_C_BFu15s_S()
{
  {
    init_simple_test("C_BFu15s_S");
    static STRUCT_IF_C C_BFu15s_S lv;
    check2(sizeof(lv), 6, "sizeof(C_BFu15s_S)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu15s_S)");
    check_field_offset(lv, v1, 0, "C_BFu15s_S.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_S");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_S");
    check_field_offset(lv, v3, 4, "C_BFu15s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_S, C_BFu15s_S)
//============================================================================


struct  C_BFu15s_Uc  {
  char v1;
  unsigned short v2:15;
  unsigned char v3;
};
//SIG(1 C_BFu15s_Uc) C1{ Fc Fs:15 Fc}



static void Test_C_BFu15s_Uc()
{
  {
    init_simple_test("C_BFu15s_Uc");
    static STRUCT_IF_C C_BFu15s_Uc lv;
    check2(sizeof(lv), 6, "sizeof(C_BFu15s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu15s_Uc)");
    check_field_offset(lv, v1, 0, "C_BFu15s_Uc.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_Uc");
    check_field_offset(lv, v3, 4, "C_BFu15s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_Uc, C_BFu15s_Uc)
//============================================================================


struct  C_BFu15s_Ui  {
  char v1;
  unsigned short v2:15;
  unsigned int v3;
};
//SIG(1 C_BFu15s_Ui) C1{ Fc Fs:15 Fi}



static void Test_C_BFu15s_Ui()
{
  {
    init_simple_test("C_BFu15s_Ui");
    static STRUCT_IF_C C_BFu15s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu15s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15s_Ui)");
    check_field_offset(lv, v1, 0, "C_BFu15s_Ui.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_Ui");
    check_field_offset(lv, v3, 4, "C_BFu15s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_Ui, C_BFu15s_Ui)
//============================================================================


struct  C_BFu15s_Ul  {
  char v1;
  unsigned short v2:15;
  __tsu64 v3;
};
//SIG(1 C_BFu15s_Ul) C1{ Fc Fs:15 FL}



static void Test_C_BFu15s_Ul()
{
  {
    init_simple_test("C_BFu15s_Ul");
    static STRUCT_IF_C C_BFu15s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu15s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15s_Ul)");
    check_field_offset(lv, v1, 0, "C_BFu15s_Ul.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu15s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_Ul, C_BFu15s_Ul)
//============================================================================


struct  C_BFu15s_Us  {
  char v1;
  unsigned short v2:15;
  unsigned short v3;
};
//SIG(1 C_BFu15s_Us) C1{ Fc Fs:15 Fs}



static void Test_C_BFu15s_Us()
{
  {
    init_simple_test("C_BFu15s_Us");
    static STRUCT_IF_C C_BFu15s_Us lv;
    check2(sizeof(lv), 6, "sizeof(C_BFu15s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu15s_Us)");
    check_field_offset(lv, v1, 0, "C_BFu15s_Us.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_Us");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_Us");
    check_field_offset(lv, v3, 4, "C_BFu15s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_Us, C_BFu15s_Us)
//============================================================================


struct  C_BFu15s_Vp  {
  char v1;
  unsigned short v2:15;
  void *v3;
};
//SIG(1 C_BFu15s_Vp) C1{ Fc Fs:15 Fp}



static void Test_C_BFu15s_Vp()
{
  {
    init_simple_test("C_BFu15s_Vp");
    static STRUCT_IF_C C_BFu15s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu15s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15s_Vp)");
    check_field_offset(lv, v1, 0, "C_BFu15s_Vp.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu15s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_Vp, C_BFu15s_Vp)
//============================================================================


struct  C_BFu16i  {
  char v1;
  unsigned int v2:16;
};
//SIG(1 C_BFu16i) C1{ Fc Fi:16}



static void Test_C_BFu16i()
{
  {
    init_simple_test("C_BFu16i");
    static STRUCT_IF_C C_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i)");
    check_field_offset(lv, v1, 0, "C_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i, C_BFu16i)
//============================================================================


struct  C_BFu16i_BFu15i  {
  char v1;
  unsigned int v2:16;
  unsigned int v3:15;
};
//SIG(1 C_BFu16i_BFu15i) C1{ Fc Fi:16 Fi:15}



static void Test_C_BFu16i_BFu15i()
{
  {
    init_simple_test("C_BFu16i_BFu15i");
    static STRUCT_IF_C C_BFu16i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i_BFu15i)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "C_BFu16i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "C_BFu16i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu15i, C_BFu16i_BFu15i)
//============================================================================


struct  C_BFu16i_BFu15ll  {
  char v1;
  unsigned int v2:16;
  __tsu64 v3:15;
};
//SIG(1 C_BFu16i_BFu15ll) C1{ Fc Fi:16 FL:15}



static void Test_C_BFu16i_BFu15ll()
{
  {
    init_simple_test("C_BFu16i_BFu15ll");
    static STRUCT_IF_C C_BFu16i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16i_BFu15ll)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "C_BFu16i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "C_BFu16i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu15ll, C_BFu16i_BFu15ll)
//============================================================================


struct  C_BFu16i_BFu15s  {
  char v1;
  unsigned int v2:16;
  unsigned short v3:15;
};
//SIG(1 C_BFu16i_BFu15s) C1{ Fc Fi:16 Fs:15}



static void Test_C_BFu16i_BFu15s()
{
  {
    init_simple_test("C_BFu16i_BFu15s");
    static STRUCT_IF_C C_BFu16i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i_BFu15s)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "C_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "C_BFu16i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu15s, C_BFu16i_BFu15s)
//============================================================================


struct  C_BFu16i_BFu16i  {
  char v1;
  unsigned int v2:16;
  unsigned int v3:16;
};
//SIG(1 C_BFu16i_BFu16i) C1{ Fc Fi:16 Fi:16}



static void Test_C_BFu16i_BFu16i()
{
  {
    init_simple_test("C_BFu16i_BFu16i");
    static STRUCT_IF_C C_BFu16i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i_BFu16i)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "C_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu16i, C_BFu16i_BFu16i)
//============================================================================


struct  C_BFu16i_BFu16ll  {
  char v1;
  unsigned int v2:16;
  __tsu64 v3:16;
};
//SIG(1 C_BFu16i_BFu16ll) C1{ Fc Fi:16 FL:16}



static void Test_C_BFu16i_BFu16ll()
{
  {
    init_simple_test("C_BFu16i_BFu16ll");
    static STRUCT_IF_C C_BFu16i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16i_BFu16ll)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "C_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu16ll, C_BFu16i_BFu16ll)
//============================================================================


struct  C_BFu16i_BFu16s  {
  char v1;
  unsigned int v2:16;
  unsigned short v3:16;
};
//SIG(1 C_BFu16i_BFu16s) C1{ Fc Fi:16 Fs:16}



static void Test_C_BFu16i_BFu16s()
{
  {
    init_simple_test("C_BFu16i_BFu16s");
    static STRUCT_IF_C C_BFu16i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i_BFu16s)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "C_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu16s, C_BFu16i_BFu16s)
//============================================================================


struct  C_BFu16i_BFu17i  {
  char v1;
  unsigned int v2:16;
  unsigned int v3:17;
};
//SIG(1 C_BFu16i_BFu17i) C1{ Fc Fi:16 Fi:17}



static void Test_C_BFu16i_BFu17i()
{
  {
    init_simple_test("C_BFu16i_BFu17i");
    static STRUCT_IF_C C_BFu16i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i_BFu17i)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "C_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "C_BFu16i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu17i, C_BFu16i_BFu17i)
//============================================================================


struct  C_BFu16i_BFu17ll  {
  char v1;
  unsigned int v2:16;
  __tsu64 v3:17;
};
//SIG(1 C_BFu16i_BFu17ll) C1{ Fc Fi:16 FL:17}



static void Test_C_BFu16i_BFu17ll()
{
  {
    init_simple_test("C_BFu16i_BFu17ll");
    static STRUCT_IF_C C_BFu16i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16i_BFu17ll)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "C_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "C_BFu16i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu17ll, C_BFu16i_BFu17ll)
//============================================================================


struct  C_BFu16i_BFu1c  {
  char v1;
  unsigned int v2:16;
  unsigned char v3:1;
};
//SIG(1 C_BFu16i_BFu1c) C1{ Fc Fi:16 Fc:1}



static void Test_C_BFu16i_BFu1c()
{
  {
    init_simple_test("C_BFu16i_BFu1c");
    static STRUCT_IF_C C_BFu16i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu16i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i_BFu1c)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "C_BFu16i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu1c, C_BFu16i_BFu1c)
//============================================================================


struct  C_BFu16i_BFu1i  {
  char v1;
  unsigned int v2:16;
  unsigned int v3:1;
};
//SIG(1 C_BFu16i_BFu1i) C1{ Fc Fi:16 Fi:1}



static void Test_C_BFu16i_BFu1i()
{
  {
    init_simple_test("C_BFu16i_BFu1i");
    static STRUCT_IF_C C_BFu16i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu16i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i_BFu1i)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "C_BFu16i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu1i, C_BFu16i_BFu1i)
//============================================================================


struct  C_BFu16i_BFu1ll  {
  char v1;
  unsigned int v2:16;
  __tsu64 v3:1;
};
//SIG(1 C_BFu16i_BFu1ll) C1{ Fc Fi:16 FL:1}



static void Test_C_BFu16i_BFu1ll()
{
  {
    init_simple_test("C_BFu16i_BFu1ll");
    static STRUCT_IF_C C_BFu16i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu16i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16i_BFu1ll)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "C_BFu16i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu1ll, C_BFu16i_BFu1ll)
//============================================================================


struct  C_BFu16i_BFu1s  {
  char v1;
  unsigned int v2:16;
  unsigned short v3:1;
};
//SIG(1 C_BFu16i_BFu1s) C1{ Fc Fi:16 Fs:1}



static void Test_C_BFu16i_BFu1s()
{
  {
    init_simple_test("C_BFu16i_BFu1s");
    static STRUCT_IF_C C_BFu16i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu16i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i_BFu1s)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "C_BFu16i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu1s, C_BFu16i_BFu1s)
//============================================================================


struct  C_BFu16i_BFu31i  {
  char v1;
  unsigned int v2:16;
  unsigned int v3:31;
};
//SIG(1 C_BFu16i_BFu31i) C1{ Fc Fi:16 Fi:31}



static void Test_C_BFu16i_BFu31i()
{
  {
    init_simple_test("C_BFu16i_BFu31i");
    static STRUCT_IF_C C_BFu16i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i_BFu31i)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "C_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "C_BFu16i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu31i, C_BFu16i_BFu31i)
//============================================================================


struct  C_BFu16i_BFu31ll  {
  char v1;
  unsigned int v2:16;
  __tsu64 v3:31;
};
//SIG(1 C_BFu16i_BFu31ll) C1{ Fc Fi:16 FL:31}



static void Test_C_BFu16i_BFu31ll()
{
  {
    init_simple_test("C_BFu16i_BFu31ll");
    static STRUCT_IF_C C_BFu16i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16i_BFu31ll)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "C_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "C_BFu16i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu31ll, C_BFu16i_BFu31ll)
//============================================================================


struct  C_BFu16i_BFu32i  {
  char v1;
  unsigned int v2:16;
  unsigned int v3:32;
};
//SIG(1 C_BFu16i_BFu32i) C1{ Fc Fi:16 Fi:32}



static void Test_C_BFu16i_BFu32i()
{
  {
    init_simple_test("C_BFu16i_BFu32i");
    static STRUCT_IF_C C_BFu16i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i_BFu32i)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "C_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "C_BFu16i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu32i, C_BFu16i_BFu32i)
//============================================================================


struct  C_BFu16i_BFu32ll  {
  char v1;
  unsigned int v2:16;
  __tsu64 v3:32;
};
//SIG(1 C_BFu16i_BFu32ll) C1{ Fc Fi:16 FL:32}



static void Test_C_BFu16i_BFu32ll()
{
  {
    init_simple_test("C_BFu16i_BFu32ll");
    static STRUCT_IF_C C_BFu16i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16i_BFu32ll)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "C_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "C_BFu16i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu32ll, C_BFu16i_BFu32ll)
//============================================================================


struct  C_BFu16i_BFu33  {
  char v1;
  unsigned int v2:16;
  __tsu64 v3:33;
};
//SIG(1 C_BFu16i_BFu33) C1{ Fc Fi:16 FL:33}



static void Test_C_BFu16i_BFu33()
{
  {
    init_simple_test("C_BFu16i_BFu33");
    static STRUCT_IF_C C_BFu16i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16i_BFu33)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "C_BFu16i_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "C_BFu16i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu33, C_BFu16i_BFu33)
//============================================================================


struct  C_BFu16i_BFu7c  {
  char v1;
  unsigned int v2:16;
  unsigned char v3:7;
};
//SIG(1 C_BFu16i_BFu7c) C1{ Fc Fi:16 Fc:7}



static void Test_C_BFu16i_BFu7c()
{
  {
    init_simple_test("C_BFu16i_BFu7c");
    static STRUCT_IF_C C_BFu16i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu16i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i_BFu7c)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "C_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "C_BFu16i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu7c, C_BFu16i_BFu7c)
//============================================================================


struct  C_BFu16i_BFu7i  {
  char v1;
  unsigned int v2:16;
  unsigned int v3:7;
};
//SIG(1 C_BFu16i_BFu7i) C1{ Fc Fi:16 Fi:7}



static void Test_C_BFu16i_BFu7i()
{
  {
    init_simple_test("C_BFu16i_BFu7i");
    static STRUCT_IF_C C_BFu16i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu16i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i_BFu7i)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "C_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "C_BFu16i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu7i, C_BFu16i_BFu7i)
//============================================================================


struct  C_BFu16i_BFu7ll  {
  char v1;
  unsigned int v2:16;
  __tsu64 v3:7;
};
//SIG(1 C_BFu16i_BFu7ll) C1{ Fc Fi:16 FL:7}



static void Test_C_BFu16i_BFu7ll()
{
  {
    init_simple_test("C_BFu16i_BFu7ll");
    static STRUCT_IF_C C_BFu16i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu16i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16i_BFu7ll)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "C_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "C_BFu16i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu7ll, C_BFu16i_BFu7ll)
//============================================================================


struct  C_BFu16i_BFu7s  {
  char v1;
  unsigned int v2:16;
  unsigned short v3:7;
};
//SIG(1 C_BFu16i_BFu7s) C1{ Fc Fi:16 Fs:7}



static void Test_C_BFu16i_BFu7s()
{
  {
    init_simple_test("C_BFu16i_BFu7s");
    static STRUCT_IF_C C_BFu16i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu16i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i_BFu7s)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "C_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "C_BFu16i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu7s, C_BFu16i_BFu7s)
//============================================================================


struct  C_BFu16i_BFu8c  {
  char v1;
  unsigned int v2:16;
  unsigned char v3:8;
};
//SIG(1 C_BFu16i_BFu8c) C1{ Fc Fi:16 Fc:8}



static void Test_C_BFu16i_BFu8c()
{
  {
    init_simple_test("C_BFu16i_BFu8c");
    static STRUCT_IF_C C_BFu16i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu16i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i_BFu8c)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "C_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "C_BFu16i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu8c, C_BFu16i_BFu8c)
//============================================================================


struct  C_BFu16i_BFu8i  {
  char v1;
  unsigned int v2:16;
  unsigned int v3:8;
};
//SIG(1 C_BFu16i_BFu8i) C1{ Fc Fi:16 Fi:8}



static void Test_C_BFu16i_BFu8i()
{
  {
    init_simple_test("C_BFu16i_BFu8i");
    static STRUCT_IF_C C_BFu16i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu16i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i_BFu8i)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "C_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "C_BFu16i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu8i, C_BFu16i_BFu8i)
//============================================================================


struct  C_BFu16i_BFu8ll  {
  char v1;
  unsigned int v2:16;
  __tsu64 v3:8;
};
//SIG(1 C_BFu16i_BFu8ll) C1{ Fc Fi:16 FL:8}



static void Test_C_BFu16i_BFu8ll()
{
  {
    init_simple_test("C_BFu16i_BFu8ll");
    static STRUCT_IF_C C_BFu16i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu16i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16i_BFu8ll)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "C_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "C_BFu16i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu8ll, C_BFu16i_BFu8ll)
//============================================================================


struct  C_BFu16i_BFu8s  {
  char v1;
  unsigned int v2:16;
  unsigned short v3:8;
};
//SIG(1 C_BFu16i_BFu8s) C1{ Fc Fi:16 Fs:8}



static void Test_C_BFu16i_BFu8s()
{
  {
    init_simple_test("C_BFu16i_BFu8s");
    static STRUCT_IF_C C_BFu16i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu16i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i_BFu8s)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "C_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "C_BFu16i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu8s, C_BFu16i_BFu8s)
//============================================================================


struct  C_BFu16i_BFu9i  {
  char v1;
  unsigned int v2:16;
  unsigned int v3:9;
};
//SIG(1 C_BFu16i_BFu9i) C1{ Fc Fi:16 Fi:9}



static void Test_C_BFu16i_BFu9i()
{
  {
    init_simple_test("C_BFu16i_BFu9i");
    static STRUCT_IF_C C_BFu16i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i_BFu9i)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "C_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "C_BFu16i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu9i, C_BFu16i_BFu9i)
//============================================================================


struct  C_BFu16i_BFu9ll  {
  char v1;
  unsigned int v2:16;
  __tsu64 v3:9;
};
//SIG(1 C_BFu16i_BFu9ll) C1{ Fc Fi:16 FL:9}



static void Test_C_BFu16i_BFu9ll()
{
  {
    init_simple_test("C_BFu16i_BFu9ll");
    static STRUCT_IF_C C_BFu16i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16i_BFu9ll)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "C_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "C_BFu16i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu9ll, C_BFu16i_BFu9ll)
//============================================================================


struct  C_BFu16i_BFu9s  {
  char v1;
  unsigned int v2:16;
  unsigned short v3:9;
};
//SIG(1 C_BFu16i_BFu9s) C1{ Fc Fi:16 Fs:9}



static void Test_C_BFu16i_BFu9s()
{
  {
    init_simple_test("C_BFu16i_BFu9s");
    static STRUCT_IF_C C_BFu16i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i_BFu9s)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "C_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "C_BFu16i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu9s, C_BFu16i_BFu9s)
//============================================================================


struct  C_BFu16i_C  {
  char v1;
  unsigned int v2:16;
  char v3;
};
//SIG(1 C_BFu16i_C) C1{ Fc Fi:16 Fc}



static void Test_C_BFu16i_C()
{
  {
    init_simple_test("C_BFu16i_C");
    static STRUCT_IF_C C_BFu16i_C lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu16i_C)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i_C)");
    check_field_offset(lv, v1, 0, "C_BFu16i_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_C");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_C");
    check_field_offset(lv, v3, 3, "C_BFu16i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_C, C_BFu16i_C)
//============================================================================


struct  C_BFu16i_D  {
  char v1;
  unsigned int v2:16;
  double v3;
};
//SIG(1 C_BFu16i_D) C1{ Fc Fi:16 FL}



static void Test_C_BFu16i_D()
{
  {
    init_simple_test("C_BFu16i_D");
    static STRUCT_IF_C C_BFu16i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu16i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16i_D)");
    check_field_offset(lv, v1, 0, "C_BFu16i_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_D");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu16i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_D, C_BFu16i_D)
//============================================================================


struct  C_BFu16i_F  {
  char v1;
  unsigned int v2:16;
  float v3;
};
//SIG(1 C_BFu16i_F) C1{ Fc Fi:16 Fi}



static void Test_C_BFu16i_F()
{
  {
    init_simple_test("C_BFu16i_F");
    static STRUCT_IF_C C_BFu16i_F lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16i_F)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i_F)");
    check_field_offset(lv, v1, 0, "C_BFu16i_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_F");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_F");
    check_field_offset(lv, v3, 4, "C_BFu16i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_F, C_BFu16i_F)
//============================================================================


struct  C_BFu16i_I  {
  char v1;
  unsigned int v2:16;
  int v3;
};
//SIG(1 C_BFu16i_I) C1{ Fc Fi:16 Fi}



static void Test_C_BFu16i_I()
{
  {
    init_simple_test("C_BFu16i_I");
    static STRUCT_IF_C C_BFu16i_I lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16i_I)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i_I)");
    check_field_offset(lv, v1, 0, "C_BFu16i_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_I");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_I");
    check_field_offset(lv, v3, 4, "C_BFu16i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_I, C_BFu16i_I)
//============================================================================


struct  C_BFu16i_Ip  {
  char v1;
  unsigned int v2:16;
  int *v3;
};
//SIG(1 C_BFu16i_Ip) C1{ Fc Fi:16 Fp}



static void Test_C_BFu16i_Ip()
{
  {
    init_simple_test("C_BFu16i_Ip");
    static STRUCT_IF_C C_BFu16i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu16i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16i_Ip)");
    check_field_offset(lv, v1, 0, "C_BFu16i_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_Ip");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu16i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_Ip, C_BFu16i_Ip)
//============================================================================


struct  C_BFu16i_L  {
  char v1;
  unsigned int v2:16;
  __tsi64 v3;
};
//SIG(1 C_BFu16i_L) C1{ Fc Fi:16 FL}



static void Test_C_BFu16i_L()
{
  {
    init_simple_test("C_BFu16i_L");
    static STRUCT_IF_C C_BFu16i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu16i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16i_L)");
    check_field_offset(lv, v1, 0, "C_BFu16i_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_L");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu16i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_L, C_BFu16i_L)
//============================================================================


struct  C_BFu16i_S  {
  char v1;
  unsigned int v2:16;
  short v3;
};
//SIG(1 C_BFu16i_S) C1{ Fc Fi:16 Fs}



static void Test_C_BFu16i_S()
{
  {
    init_simple_test("C_BFu16i_S");
    static STRUCT_IF_C C_BFu16i_S lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16i_S)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i_S)");
    check_field_offset(lv, v1, 0, "C_BFu16i_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_S");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_S");
    check_field_offset(lv, v3, 4, "C_BFu16i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_S, C_BFu16i_S)
//============================================================================


struct  C_BFu16i_Uc  {
  char v1;
  unsigned int v2:16;
  unsigned char v3;
};
//SIG(1 C_BFu16i_Uc) C1{ Fc Fi:16 Fc}



static void Test_C_BFu16i_Uc()
{
  {
    init_simple_test("C_BFu16i_Uc");
    static STRUCT_IF_C C_BFu16i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu16i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i_Uc)");
    check_field_offset(lv, v1, 0, "C_BFu16i_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_Uc");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_Uc");
    check_field_offset(lv, v3, 3, "C_BFu16i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_Uc, C_BFu16i_Uc)
//============================================================================


struct  C_BFu16i_Ui  {
  char v1;
  unsigned int v2:16;
  unsigned int v3;
};
//SIG(1 C_BFu16i_Ui) C1{ Fc Fi:16 Fi}



static void Test_C_BFu16i_Ui()
{
  {
    init_simple_test("C_BFu16i_Ui");
    static STRUCT_IF_C C_BFu16i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i_Ui)");
    check_field_offset(lv, v1, 0, "C_BFu16i_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_Ui");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_Ui");
    check_field_offset(lv, v3, 4, "C_BFu16i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_Ui, C_BFu16i_Ui)
//============================================================================


struct  C_BFu16i_Ul  {
  char v1;
  unsigned int v2:16;
  __tsu64 v3;
};
//SIG(1 C_BFu16i_Ul) C1{ Fc Fi:16 FL}



static void Test_C_BFu16i_Ul()
{
  {
    init_simple_test("C_BFu16i_Ul");
    static STRUCT_IF_C C_BFu16i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu16i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16i_Ul)");
    check_field_offset(lv, v1, 0, "C_BFu16i_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_Ul");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu16i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_Ul, C_BFu16i_Ul)
//============================================================================


struct  C_BFu16i_Us  {
  char v1;
  unsigned int v2:16;
  unsigned short v3;
};
//SIG(1 C_BFu16i_Us) C1{ Fc Fi:16 Fs}



static void Test_C_BFu16i_Us()
{
  {
    init_simple_test("C_BFu16i_Us");
    static STRUCT_IF_C C_BFu16i_Us lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i_Us)");
    check_field_offset(lv, v1, 0, "C_BFu16i_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_Us");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_Us");
    check_field_offset(lv, v3, 4, "C_BFu16i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_Us, C_BFu16i_Us)
//============================================================================


struct  C_BFu16i_Vp  {
  char v1;
  unsigned int v2:16;
  void *v3;
};
//SIG(1 C_BFu16i_Vp) C1{ Fc Fi:16 Fp}



static void Test_C_BFu16i_Vp()
{
  {
    init_simple_test("C_BFu16i_Vp");
    static STRUCT_IF_C C_BFu16i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu16i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16i_Vp)");
    check_field_offset(lv, v1, 0, "C_BFu16i_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_Vp");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu16i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_Vp, C_BFu16i_Vp)
//============================================================================


struct  C_BFu16ll  {
  char v1;
  __tsu64 v2:16;
};
//SIG(1 C_BFu16ll) C1{ Fc FL:16}



static void Test_C_BFu16ll()
{
  {
    init_simple_test("C_BFu16ll");
    static STRUCT_IF_C C_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll)");
    check_field_offset(lv, v1, 0, "C_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll, C_BFu16ll)
//============================================================================


struct  C_BFu16ll_BFu15i  {
  char v1;
  __tsu64 v2:16;
  unsigned int v3:15;
};
//SIG(1 C_BFu16ll_BFu15i) C1{ Fc FL:16 Fi:15}



static void Test_C_BFu16ll_BFu15i()
{
  {
    init_simple_test("C_BFu16ll_BFu15i");
    static STRUCT_IF_C C_BFu16ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu15i)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "C_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "C_BFu16ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu15i, C_BFu16ll_BFu15i)
//============================================================================


struct  C_BFu16ll_BFu15ll  {
  char v1;
  __tsu64 v2:16;
  __tsu64 v3:15;
};
//SIG(1 C_BFu16ll_BFu15ll) C1{ Fc FL:16 FL:15}



static void Test_C_BFu16ll_BFu15ll()
{
  {
    init_simple_test("C_BFu16ll_BFu15ll");
    static STRUCT_IF_C C_BFu16ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "C_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "C_BFu16ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu15ll, C_BFu16ll_BFu15ll)
//============================================================================


struct  C_BFu16ll_BFu15s  {
  char v1;
  __tsu64 v2:16;
  unsigned short v3:15;
};
//SIG(1 C_BFu16ll_BFu15s) C1{ Fc FL:16 Fs:15}



static void Test_C_BFu16ll_BFu15s()
{
  {
    init_simple_test("C_BFu16ll_BFu15s");
    static STRUCT_IF_C C_BFu16ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu15s)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "C_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "C_BFu16ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu15s, C_BFu16ll_BFu15s)
//============================================================================


struct  C_BFu16ll_BFu16i  {
  char v1;
  __tsu64 v2:16;
  unsigned int v3:16;
};
//SIG(1 C_BFu16ll_BFu16i) C1{ Fc FL:16 Fi:16}



static void Test_C_BFu16ll_BFu16i()
{
  {
    init_simple_test("C_BFu16ll_BFu16i");
    static STRUCT_IF_C C_BFu16ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu16i)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "C_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu16i, C_BFu16ll_BFu16i)
//============================================================================


struct  C_BFu16ll_BFu16ll  {
  char v1;
  __tsu64 v2:16;
  __tsu64 v3:16;
};
//SIG(1 C_BFu16ll_BFu16ll) C1{ Fc FL:16 FL:16}



static void Test_C_BFu16ll_BFu16ll()
{
  {
    init_simple_test("C_BFu16ll_BFu16ll");
    static STRUCT_IF_C C_BFu16ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "C_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu16ll, C_BFu16ll_BFu16ll)
//============================================================================


struct  C_BFu16ll_BFu16s  {
  char v1;
  __tsu64 v2:16;
  unsigned short v3:16;
};
//SIG(1 C_BFu16ll_BFu16s) C1{ Fc FL:16 Fs:16}



static void Test_C_BFu16ll_BFu16s()
{
  {
    init_simple_test("C_BFu16ll_BFu16s");
    static STRUCT_IF_C C_BFu16ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu16s)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "C_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu16s, C_BFu16ll_BFu16s)
//============================================================================


struct  C_BFu16ll_BFu17i  {
  char v1;
  __tsu64 v2:16;
  unsigned int v3:17;
};
//SIG(1 C_BFu16ll_BFu17i) C1{ Fc FL:16 Fi:17}



static void Test_C_BFu16ll_BFu17i()
{
  {
    init_simple_test("C_BFu16ll_BFu17i");
    static STRUCT_IF_C C_BFu16ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu17i)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "C_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "C_BFu16ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu17i, C_BFu16ll_BFu17i)
//============================================================================


struct  C_BFu16ll_BFu17ll  {
  char v1;
  __tsu64 v2:16;
  __tsu64 v3:17;
};
//SIG(1 C_BFu16ll_BFu17ll) C1{ Fc FL:16 FL:17}



static void Test_C_BFu16ll_BFu17ll()
{
  {
    init_simple_test("C_BFu16ll_BFu17ll");
    static STRUCT_IF_C C_BFu16ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "C_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "C_BFu16ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu17ll, C_BFu16ll_BFu17ll)
//============================================================================


struct  C_BFu16ll_BFu1c  {
  char v1;
  __tsu64 v2:16;
  unsigned char v3:1;
};
//SIG(1 C_BFu16ll_BFu1c) C1{ Fc FL:16 Fc:1}



static void Test_C_BFu16ll_BFu1c()
{
  {
    init_simple_test("C_BFu16ll_BFu1c");
    static STRUCT_IF_C C_BFu16ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu16ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu1c)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "C_BFu16ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu1c, C_BFu16ll_BFu1c)
//============================================================================


struct  C_BFu16ll_BFu1i  {
  char v1;
  __tsu64 v2:16;
  unsigned int v3:1;
};
//SIG(1 C_BFu16ll_BFu1i) C1{ Fc FL:16 Fi:1}



static void Test_C_BFu16ll_BFu1i()
{
  {
    init_simple_test("C_BFu16ll_BFu1i");
    static STRUCT_IF_C C_BFu16ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu16ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu1i)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "C_BFu16ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu1i, C_BFu16ll_BFu1i)
//============================================================================


struct  C_BFu16ll_BFu1ll  {
  char v1;
  __tsu64 v2:16;
  __tsu64 v3:1;
};
//SIG(1 C_BFu16ll_BFu1ll) C1{ Fc FL:16 FL:1}



static void Test_C_BFu16ll_BFu1ll()
{
  {
    init_simple_test("C_BFu16ll_BFu1ll");
    static STRUCT_IF_C C_BFu16ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu16ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "C_BFu16ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu1ll, C_BFu16ll_BFu1ll)
//============================================================================


struct  C_BFu16ll_BFu1s  {
  char v1;
  __tsu64 v2:16;
  unsigned short v3:1;
};
//SIG(1 C_BFu16ll_BFu1s) C1{ Fc FL:16 Fs:1}



static void Test_C_BFu16ll_BFu1s()
{
  {
    init_simple_test("C_BFu16ll_BFu1s");
    static STRUCT_IF_C C_BFu16ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu16ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu1s)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "C_BFu16ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu1s, C_BFu16ll_BFu1s)
//============================================================================


struct  C_BFu16ll_BFu31i  {
  char v1;
  __tsu64 v2:16;
  unsigned int v3:31;
};
//SIG(1 C_BFu16ll_BFu31i) C1{ Fc FL:16 Fi:31}



static void Test_C_BFu16ll_BFu31i()
{
  {
    init_simple_test("C_BFu16ll_BFu31i");
    static STRUCT_IF_C C_BFu16ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu31i)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "C_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "C_BFu16ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu31i, C_BFu16ll_BFu31i)
//============================================================================


struct  C_BFu16ll_BFu31ll  {
  char v1;
  __tsu64 v2:16;
  __tsu64 v3:31;
};
//SIG(1 C_BFu16ll_BFu31ll) C1{ Fc FL:16 FL:31}



static void Test_C_BFu16ll_BFu31ll()
{
  {
    init_simple_test("C_BFu16ll_BFu31ll");
    static STRUCT_IF_C C_BFu16ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "C_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "C_BFu16ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu31ll, C_BFu16ll_BFu31ll)
//============================================================================


struct  C_BFu16ll_BFu32i  {
  char v1;
  __tsu64 v2:16;
  unsigned int v3:32;
};
//SIG(1 C_BFu16ll_BFu32i) C1{ Fc FL:16 Fi:32}



static void Test_C_BFu16ll_BFu32i()
{
  {
    init_simple_test("C_BFu16ll_BFu32i");
    static STRUCT_IF_C C_BFu16ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu32i)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "C_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "C_BFu16ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu32i, C_BFu16ll_BFu32i)
//============================================================================


struct  C_BFu16ll_BFu32ll  {
  char v1;
  __tsu64 v2:16;
  __tsu64 v3:32;
};
//SIG(1 C_BFu16ll_BFu32ll) C1{ Fc FL:16 FL:32}



static void Test_C_BFu16ll_BFu32ll()
{
  {
    init_simple_test("C_BFu16ll_BFu32ll");
    static STRUCT_IF_C C_BFu16ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "C_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "C_BFu16ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu32ll, C_BFu16ll_BFu32ll)
//============================================================================


struct  C_BFu16ll_BFu33  {
  char v1;
  __tsu64 v2:16;
  __tsu64 v3:33;
};
//SIG(1 C_BFu16ll_BFu33) C1{ Fc FL:16 FL:33}



static void Test_C_BFu16ll_BFu33()
{
  {
    init_simple_test("C_BFu16ll_BFu33");
    static STRUCT_IF_C C_BFu16ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu33)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "C_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "C_BFu16ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu33, C_BFu16ll_BFu33)
//============================================================================


struct  C_BFu16ll_BFu7c  {
  char v1;
  __tsu64 v2:16;
  unsigned char v3:7;
};
//SIG(1 C_BFu16ll_BFu7c) C1{ Fc FL:16 Fc:7}



static void Test_C_BFu16ll_BFu7c()
{
  {
    init_simple_test("C_BFu16ll_BFu7c");
    static STRUCT_IF_C C_BFu16ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu16ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu7c)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "C_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "C_BFu16ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu7c, C_BFu16ll_BFu7c)
//============================================================================


struct  C_BFu16ll_BFu7i  {
  char v1;
  __tsu64 v2:16;
  unsigned int v3:7;
};
//SIG(1 C_BFu16ll_BFu7i) C1{ Fc FL:16 Fi:7}



static void Test_C_BFu16ll_BFu7i()
{
  {
    init_simple_test("C_BFu16ll_BFu7i");
    static STRUCT_IF_C C_BFu16ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu16ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu7i)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "C_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "C_BFu16ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu7i, C_BFu16ll_BFu7i)
//============================================================================


struct  C_BFu16ll_BFu7ll  {
  char v1;
  __tsu64 v2:16;
  __tsu64 v3:7;
};
//SIG(1 C_BFu16ll_BFu7ll) C1{ Fc FL:16 FL:7}



static void Test_C_BFu16ll_BFu7ll()
{
  {
    init_simple_test("C_BFu16ll_BFu7ll");
    static STRUCT_IF_C C_BFu16ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu16ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "C_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "C_BFu16ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu7ll, C_BFu16ll_BFu7ll)
//============================================================================


struct  C_BFu16ll_BFu7s  {
  char v1;
  __tsu64 v2:16;
  unsigned short v3:7;
};
//SIG(1 C_BFu16ll_BFu7s) C1{ Fc FL:16 Fs:7}



static void Test_C_BFu16ll_BFu7s()
{
  {
    init_simple_test("C_BFu16ll_BFu7s");
    static STRUCT_IF_C C_BFu16ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu16ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu7s)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "C_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "C_BFu16ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu7s, C_BFu16ll_BFu7s)
//============================================================================


struct  C_BFu16ll_BFu8c  {
  char v1;
  __tsu64 v2:16;
  unsigned char v3:8;
};
//SIG(1 C_BFu16ll_BFu8c) C1{ Fc FL:16 Fc:8}



static void Test_C_BFu16ll_BFu8c()
{
  {
    init_simple_test("C_BFu16ll_BFu8c");
    static STRUCT_IF_C C_BFu16ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu16ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu8c)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "C_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "C_BFu16ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu8c, C_BFu16ll_BFu8c)
//============================================================================


struct  C_BFu16ll_BFu8i  {
  char v1;
  __tsu64 v2:16;
  unsigned int v3:8;
};
//SIG(1 C_BFu16ll_BFu8i) C1{ Fc FL:16 Fi:8}



static void Test_C_BFu16ll_BFu8i()
{
  {
    init_simple_test("C_BFu16ll_BFu8i");
    static STRUCT_IF_C C_BFu16ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu16ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu8i)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "C_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "C_BFu16ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu8i, C_BFu16ll_BFu8i)
//============================================================================


struct  C_BFu16ll_BFu8ll  {
  char v1;
  __tsu64 v2:16;
  __tsu64 v3:8;
};
//SIG(1 C_BFu16ll_BFu8ll) C1{ Fc FL:16 FL:8}



static void Test_C_BFu16ll_BFu8ll()
{
  {
    init_simple_test("C_BFu16ll_BFu8ll");
    static STRUCT_IF_C C_BFu16ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu16ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "C_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "C_BFu16ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu8ll, C_BFu16ll_BFu8ll)
//============================================================================


struct  C_BFu16ll_BFu8s  {
  char v1;
  __tsu64 v2:16;
  unsigned short v3:8;
};
//SIG(1 C_BFu16ll_BFu8s) C1{ Fc FL:16 Fs:8}



static void Test_C_BFu16ll_BFu8s()
{
  {
    init_simple_test("C_BFu16ll_BFu8s");
    static STRUCT_IF_C C_BFu16ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu16ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu8s)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "C_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "C_BFu16ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu8s, C_BFu16ll_BFu8s)
//============================================================================


struct  C_BFu16ll_BFu9i  {
  char v1;
  __tsu64 v2:16;
  unsigned int v3:9;
};
//SIG(1 C_BFu16ll_BFu9i) C1{ Fc FL:16 Fi:9}



static void Test_C_BFu16ll_BFu9i()
{
  {
    init_simple_test("C_BFu16ll_BFu9i");
    static STRUCT_IF_C C_BFu16ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu9i)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "C_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "C_BFu16ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu9i, C_BFu16ll_BFu9i)
//============================================================================


struct  C_BFu16ll_BFu9ll  {
  char v1;
  __tsu64 v2:16;
  __tsu64 v3:9;
};
//SIG(1 C_BFu16ll_BFu9ll) C1{ Fc FL:16 FL:9}



static void Test_C_BFu16ll_BFu9ll()
{
  {
    init_simple_test("C_BFu16ll_BFu9ll");
    static STRUCT_IF_C C_BFu16ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "C_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "C_BFu16ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu9ll, C_BFu16ll_BFu9ll)
//============================================================================


struct  C_BFu16ll_BFu9s  {
  char v1;
  __tsu64 v2:16;
  unsigned short v3:9;
};
//SIG(1 C_BFu16ll_BFu9s) C1{ Fc FL:16 Fs:9}



static void Test_C_BFu16ll_BFu9s()
{
  {
    init_simple_test("C_BFu16ll_BFu9s");
    static STRUCT_IF_C C_BFu16ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu9s)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "C_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "C_BFu16ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu9s, C_BFu16ll_BFu9s)
//============================================================================


struct  C_BFu16ll_C  {
  char v1;
  __tsu64 v2:16;
  char v3;
};
//SIG(1 C_BFu16ll_C) C1{ Fc FL:16 Fc}



static void Test_C_BFu16ll_C()
{
  {
    init_simple_test("C_BFu16ll_C");
    static STRUCT_IF_C C_BFu16ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu16ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_C)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_C");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_C");
    check_field_offset(lv, v3, 3, "C_BFu16ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_C, C_BFu16ll_C)
//============================================================================


struct  C_BFu16ll_D  {
  char v1;
  __tsu64 v2:16;
  double v3;
};
//SIG(1 C_BFu16ll_D) C1{ Fc FL:16 FL}



static void Test_C_BFu16ll_D()
{
  {
    init_simple_test("C_BFu16ll_D");
    static STRUCT_IF_C C_BFu16ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu16ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_D)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_D");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu16ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_D, C_BFu16ll_D)
//============================================================================


struct  C_BFu16ll_F  {
  char v1;
  __tsu64 v2:16;
  float v3;
};
//SIG(1 C_BFu16ll_F) C1{ Fc FL:16 Fi}



static void Test_C_BFu16ll_F()
{
  {
    init_simple_test("C_BFu16ll_F");
    static STRUCT_IF_C C_BFu16ll_F lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_F)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_F");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_F");
    check_field_offset(lv, v3, 4, "C_BFu16ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_F, C_BFu16ll_F)
//============================================================================


struct  C_BFu16ll_I  {
  char v1;
  __tsu64 v2:16;
  int v3;
};
//SIG(1 C_BFu16ll_I) C1{ Fc FL:16 Fi}



static void Test_C_BFu16ll_I()
{
  {
    init_simple_test("C_BFu16ll_I");
    static STRUCT_IF_C C_BFu16ll_I lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_I)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_I");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_I");
    check_field_offset(lv, v3, 4, "C_BFu16ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_I, C_BFu16ll_I)
//============================================================================


struct  C_BFu16ll_Ip  {
  char v1;
  __tsu64 v2:16;
  int *v3;
};
//SIG(1 C_BFu16ll_Ip) C1{ Fc FL:16 Fp}



static void Test_C_BFu16ll_Ip()
{
  {
    init_simple_test("C_BFu16ll_Ip");
    static STRUCT_IF_C C_BFu16ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu16ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_Ip)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_Ip");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu16ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_Ip, C_BFu16ll_Ip)
//============================================================================


struct  C_BFu16ll_L  {
  char v1;
  __tsu64 v2:16;
  __tsi64 v3;
};
//SIG(1 C_BFu16ll_L) C1{ Fc FL:16 FL}



static void Test_C_BFu16ll_L()
{
  {
    init_simple_test("C_BFu16ll_L");
    static STRUCT_IF_C C_BFu16ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu16ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_L)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_L");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu16ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_L, C_BFu16ll_L)
//============================================================================


struct  C_BFu16ll_S  {
  char v1;
  __tsu64 v2:16;
  short v3;
};
//SIG(1 C_BFu16ll_S) C1{ Fc FL:16 Fs}



static void Test_C_BFu16ll_S()
{
  {
    init_simple_test("C_BFu16ll_S");
    static STRUCT_IF_C C_BFu16ll_S lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_S)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_S");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_S");
    check_field_offset(lv, v3, 4, "C_BFu16ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_S, C_BFu16ll_S)
//============================================================================


struct  C_BFu16ll_Uc  {
  char v1;
  __tsu64 v2:16;
  unsigned char v3;
};
//SIG(1 C_BFu16ll_Uc) C1{ Fc FL:16 Fc}



static void Test_C_BFu16ll_Uc()
{
  {
    init_simple_test("C_BFu16ll_Uc");
    static STRUCT_IF_C C_BFu16ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu16ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_Uc)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_Uc");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_Uc");
    check_field_offset(lv, v3, 3, "C_BFu16ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_Uc, C_BFu16ll_Uc)
//============================================================================


struct  C_BFu16ll_Ui  {
  char v1;
  __tsu64 v2:16;
  unsigned int v3;
};
//SIG(1 C_BFu16ll_Ui) C1{ Fc FL:16 Fi}



static void Test_C_BFu16ll_Ui()
{
  {
    init_simple_test("C_BFu16ll_Ui");
    static STRUCT_IF_C C_BFu16ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_Ui)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_Ui");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_Ui");
    check_field_offset(lv, v3, 4, "C_BFu16ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_Ui, C_BFu16ll_Ui)
//============================================================================


struct  C_BFu16ll_Ul  {
  char v1;
  __tsu64 v2:16;
  __tsu64 v3;
};
//SIG(1 C_BFu16ll_Ul) C1{ Fc FL:16 FL}



static void Test_C_BFu16ll_Ul()
{
  {
    init_simple_test("C_BFu16ll_Ul");
    static STRUCT_IF_C C_BFu16ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu16ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_Ul)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_Ul");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu16ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_Ul, C_BFu16ll_Ul)
//============================================================================


struct  C_BFu16ll_Us  {
  char v1;
  __tsu64 v2:16;
  unsigned short v3;
};
//SIG(1 C_BFu16ll_Us) C1{ Fc FL:16 Fs}



static void Test_C_BFu16ll_Us()
{
  {
    init_simple_test("C_BFu16ll_Us");
    static STRUCT_IF_C C_BFu16ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_Us)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_Us");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_Us");
    check_field_offset(lv, v3, 4, "C_BFu16ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_Us, C_BFu16ll_Us)
//============================================================================


struct  C_BFu16ll_Vp  {
  char v1;
  __tsu64 v2:16;
  void *v3;
};
//SIG(1 C_BFu16ll_Vp) C1{ Fc FL:16 Fp}



static void Test_C_BFu16ll_Vp()
{
  {
    init_simple_test("C_BFu16ll_Vp");
    static STRUCT_IF_C C_BFu16ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu16ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_Vp)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_Vp");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu16ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_Vp, C_BFu16ll_Vp)
//============================================================================


struct  C_BFu16s  {
  char v1;
  unsigned short v2:16;
};
//SIG(1 C_BFu16s) C1{ Fc Fs:16}



static void Test_C_BFu16s()
{
  {
    init_simple_test("C_BFu16s");
    static STRUCT_IF_C C_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu16s)");
    check_field_offset(lv, v1, 0, "C_BFu16s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s, C_BFu16s)
//============================================================================


struct  C_BFu16s_BFu15i  {
  char v1;
  unsigned short v2:16;
  unsigned int v3:15;
};
//SIG(1 C_BFu16s_BFu15i) C1{ Fc Fs:16 Fi:15}



static void Test_C_BFu16s_BFu15i()
{
  {
    init_simple_test("C_BFu16s_BFu15i");
    static STRUCT_IF_C C_BFu16s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16s_BFu15i)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu15i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "C_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "C_BFu16s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu15i, C_BFu16s_BFu15i)
//============================================================================


struct  C_BFu16s_BFu15ll  {
  char v1;
  unsigned short v2:16;
  __tsu64 v3:15;
};
//SIG(1 C_BFu16s_BFu15ll) C1{ Fc Fs:16 FL:15}



static void Test_C_BFu16s_BFu15ll()
{
  {
    init_simple_test("C_BFu16s_BFu15ll");
    static STRUCT_IF_C C_BFu16s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16s_BFu15ll)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "C_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "C_BFu16s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu15ll, C_BFu16s_BFu15ll)
//============================================================================


struct  C_BFu16s_BFu15s  {
  char v1;
  unsigned short v2:16;
  unsigned short v3:15;
};
//SIG(1 C_BFu16s_BFu15s) C1{ Fc Fs:16 Fs:15}



static void Test_C_BFu16s_BFu15s()
{
  {
    init_simple_test("C_BFu16s_BFu15s");
    static STRUCT_IF_C C_BFu16s_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(C_BFu16s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu16s_BFu15s)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu15s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "C_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "C_BFu16s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu15s, C_BFu16s_BFu15s)
//============================================================================


struct  C_BFu16s_BFu16i  {
  char v1;
  unsigned short v2:16;
  unsigned int v3:16;
};
//SIG(1 C_BFu16s_BFu16i) C1{ Fc Fs:16 Fi:16}



static void Test_C_BFu16s_BFu16i()
{
  {
    init_simple_test("C_BFu16s_BFu16i");
    static STRUCT_IF_C C_BFu16s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16s_BFu16i)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu16i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "C_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu16i, C_BFu16s_BFu16i)
//============================================================================


struct  C_BFu16s_BFu16ll  {
  char v1;
  unsigned short v2:16;
  __tsu64 v3:16;
};
//SIG(1 C_BFu16s_BFu16ll) C1{ Fc Fs:16 FL:16}



static void Test_C_BFu16s_BFu16ll()
{
  {
    init_simple_test("C_BFu16s_BFu16ll");
    static STRUCT_IF_C C_BFu16s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16s_BFu16ll)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "C_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu16ll, C_BFu16s_BFu16ll)
//============================================================================


struct  C_BFu16s_BFu16s  {
  char v1;
  unsigned short v2:16;
  unsigned short v3:16;
};
//SIG(1 C_BFu16s_BFu16s) C1{ Fc Fs:16 Fs:16}



static void Test_C_BFu16s_BFu16s()
{
  {
    init_simple_test("C_BFu16s_BFu16s");
    static STRUCT_IF_C C_BFu16s_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(C_BFu16s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu16s_BFu16s)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu16s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "C_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu16s, C_BFu16s_BFu16s)
//============================================================================


struct  C_BFu16s_BFu17i  {
  char v1;
  unsigned short v2:16;
  unsigned int v3:17;
};
//SIG(1 C_BFu16s_BFu17i) C1{ Fc Fs:16 Fi:17}



static void Test_C_BFu16s_BFu17i()
{
  {
    init_simple_test("C_BFu16s_BFu17i");
    static STRUCT_IF_C C_BFu16s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16s_BFu17i)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu17i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "C_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "C_BFu16s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu17i, C_BFu16s_BFu17i)
//============================================================================


struct  C_BFu16s_BFu17ll  {
  char v1;
  unsigned short v2:16;
  __tsu64 v3:17;
};
//SIG(1 C_BFu16s_BFu17ll) C1{ Fc Fs:16 FL:17}



static void Test_C_BFu16s_BFu17ll()
{
  {
    init_simple_test("C_BFu16s_BFu17ll");
    static STRUCT_IF_C C_BFu16s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16s_BFu17ll)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "C_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "C_BFu16s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu17ll, C_BFu16s_BFu17ll)
//============================================================================


struct  C_BFu16s_BFu1c  {
  char v1;
  unsigned short v2:16;
  unsigned char v3:1;
};
//SIG(1 C_BFu16s_BFu1c) C1{ Fc Fs:16 Fc:1}



static void Test_C_BFu16s_BFu1c()
{
  {
    init_simple_test("C_BFu16s_BFu1c");
    static STRUCT_IF_C C_BFu16s_BFu1c lv;
    check2(sizeof(lv), 6, "sizeof(C_BFu16s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu16s_BFu1c)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu1c.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "C_BFu16s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu1c, C_BFu16s_BFu1c)
//============================================================================


struct  C_BFu16s_BFu1i  {
  char v1;
  unsigned short v2:16;
  unsigned int v3:1;
};
//SIG(1 C_BFu16s_BFu1i) C1{ Fc Fs:16 Fi:1}



static void Test_C_BFu16s_BFu1i()
{
  {
    init_simple_test("C_BFu16s_BFu1i");
    static STRUCT_IF_C C_BFu16s_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16s_BFu1i)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu1i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "C_BFu16s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu1i, C_BFu16s_BFu1i)
//============================================================================


struct  C_BFu16s_BFu1ll  {
  char v1;
  unsigned short v2:16;
  __tsu64 v3:1;
};
//SIG(1 C_BFu16s_BFu1ll) C1{ Fc Fs:16 FL:1}



static void Test_C_BFu16s_BFu1ll()
{
  {
    init_simple_test("C_BFu16s_BFu1ll");
    static STRUCT_IF_C C_BFu16s_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16s_BFu1ll)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "C_BFu16s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu1ll, C_BFu16s_BFu1ll)
//============================================================================


struct  C_BFu16s_BFu1s  {
  char v1;
  unsigned short v2:16;
  unsigned short v3:1;
};
//SIG(1 C_BFu16s_BFu1s) C1{ Fc Fs:16 Fs:1}



static void Test_C_BFu16s_BFu1s()
{
  {
    init_simple_test("C_BFu16s_BFu1s");
    static STRUCT_IF_C C_BFu16s_BFu1s lv;
    check2(sizeof(lv), 6, "sizeof(C_BFu16s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu16s_BFu1s)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu1s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "C_BFu16s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu1s, C_BFu16s_BFu1s)
//============================================================================


struct  C_BFu16s_BFu31i  {
  char v1;
  unsigned short v2:16;
  unsigned int v3:31;
};
//SIG(1 C_BFu16s_BFu31i) C1{ Fc Fs:16 Fi:31}



static void Test_C_BFu16s_BFu31i()
{
  {
    init_simple_test("C_BFu16s_BFu31i");
    static STRUCT_IF_C C_BFu16s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16s_BFu31i)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu31i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "C_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "C_BFu16s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu31i, C_BFu16s_BFu31i)
//============================================================================


struct  C_BFu16s_BFu31ll  {
  char v1;
  unsigned short v2:16;
  __tsu64 v3:31;
};
//SIG(1 C_BFu16s_BFu31ll) C1{ Fc Fs:16 FL:31}



static void Test_C_BFu16s_BFu31ll()
{
  {
    init_simple_test("C_BFu16s_BFu31ll");
    static STRUCT_IF_C C_BFu16s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16s_BFu31ll)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "C_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "C_BFu16s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu31ll, C_BFu16s_BFu31ll)
//============================================================================


struct  C_BFu16s_BFu32i  {
  char v1;
  unsigned short v2:16;
  unsigned int v3:32;
};
//SIG(1 C_BFu16s_BFu32i) C1{ Fc Fs:16 Fi:32}



static void Test_C_BFu16s_BFu32i()
{
  {
    init_simple_test("C_BFu16s_BFu32i");
    static STRUCT_IF_C C_BFu16s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16s_BFu32i)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu32i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "C_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "C_BFu16s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu32i, C_BFu16s_BFu32i)
//============================================================================


struct  C_BFu16s_BFu32ll  {
  char v1;
  unsigned short v2:16;
  __tsu64 v3:32;
};
//SIG(1 C_BFu16s_BFu32ll) C1{ Fc Fs:16 FL:32}



static void Test_C_BFu16s_BFu32ll()
{
  {
    init_simple_test("C_BFu16s_BFu32ll");
    static STRUCT_IF_C C_BFu16s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16s_BFu32ll)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "C_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "C_BFu16s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu32ll, C_BFu16s_BFu32ll)
//============================================================================


struct  C_BFu16s_BFu33  {
  char v1;
  unsigned short v2:16;
  __tsu64 v3:33;
};
//SIG(1 C_BFu16s_BFu33) C1{ Fc Fs:16 FL:33}



static void Test_C_BFu16s_BFu33()
{
  {
    init_simple_test("C_BFu16s_BFu33");
    static STRUCT_IF_C C_BFu16s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu16s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16s_BFu33)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu33.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "C_BFu16s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "C_BFu16s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu33, C_BFu16s_BFu33)
//============================================================================


struct  C_BFu16s_BFu7c  {
  char v1;
  unsigned short v2:16;
  unsigned char v3:7;
};
//SIG(1 C_BFu16s_BFu7c) C1{ Fc Fs:16 Fc:7}



static void Test_C_BFu16s_BFu7c()
{
  {
    init_simple_test("C_BFu16s_BFu7c");
    static STRUCT_IF_C C_BFu16s_BFu7c lv;
    check2(sizeof(lv), 6, "sizeof(C_BFu16s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu16s_BFu7c)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu7c.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "C_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "C_BFu16s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu7c, C_BFu16s_BFu7c)
//============================================================================


struct  C_BFu16s_BFu7i  {
  char v1;
  unsigned short v2:16;
  unsigned int v3:7;
};
//SIG(1 C_BFu16s_BFu7i) C1{ Fc Fs:16 Fi:7}



static void Test_C_BFu16s_BFu7i()
{
  {
    init_simple_test("C_BFu16s_BFu7i");
    static STRUCT_IF_C C_BFu16s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16s_BFu7i)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu7i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "C_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "C_BFu16s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu7i, C_BFu16s_BFu7i)
//============================================================================


struct  C_BFu16s_BFu7ll  {
  char v1;
  unsigned short v2:16;
  __tsu64 v3:7;
};
//SIG(1 C_BFu16s_BFu7ll) C1{ Fc Fs:16 FL:7}



static void Test_C_BFu16s_BFu7ll()
{
  {
    init_simple_test("C_BFu16s_BFu7ll");
    static STRUCT_IF_C C_BFu16s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16s_BFu7ll)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "C_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "C_BFu16s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu7ll, C_BFu16s_BFu7ll)
//============================================================================


struct  C_BFu16s_BFu7s  {
  char v1;
  unsigned short v2:16;
  unsigned short v3:7;
};
//SIG(1 C_BFu16s_BFu7s) C1{ Fc Fs:16 Fs:7}



static void Test_C_BFu16s_BFu7s()
{
  {
    init_simple_test("C_BFu16s_BFu7s");
    static STRUCT_IF_C C_BFu16s_BFu7s lv;
    check2(sizeof(lv), 6, "sizeof(C_BFu16s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu16s_BFu7s)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu7s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "C_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "C_BFu16s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu7s, C_BFu16s_BFu7s)
//============================================================================


struct  C_BFu16s_BFu8c  {
  char v1;
  unsigned short v2:16;
  unsigned char v3:8;
};
//SIG(1 C_BFu16s_BFu8c) C1{ Fc Fs:16 Fc:8}



static void Test_C_BFu16s_BFu8c()
{
  {
    init_simple_test("C_BFu16s_BFu8c");
    static STRUCT_IF_C C_BFu16s_BFu8c lv;
    check2(sizeof(lv), 6, "sizeof(C_BFu16s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu16s_BFu8c)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu8c.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "C_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "C_BFu16s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu8c, C_BFu16s_BFu8c)
//============================================================================


struct  C_BFu16s_BFu8i  {
  char v1;
  unsigned short v2:16;
  unsigned int v3:8;
};
//SIG(1 C_BFu16s_BFu8i) C1{ Fc Fs:16 Fi:8}



static void Test_C_BFu16s_BFu8i()
{
  {
    init_simple_test("C_BFu16s_BFu8i");
    static STRUCT_IF_C C_BFu16s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16s_BFu8i)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu8i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "C_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "C_BFu16s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu8i, C_BFu16s_BFu8i)
//============================================================================


struct  C_BFu16s_BFu8ll  {
  char v1;
  unsigned short v2:16;
  __tsu64 v3:8;
};
//SIG(1 C_BFu16s_BFu8ll) C1{ Fc Fs:16 FL:8}



static void Test_C_BFu16s_BFu8ll()
{
  {
    init_simple_test("C_BFu16s_BFu8ll");
    static STRUCT_IF_C C_BFu16s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16s_BFu8ll)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "C_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "C_BFu16s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu8ll, C_BFu16s_BFu8ll)
//============================================================================


struct  C_BFu16s_BFu8s  {
  char v1;
  unsigned short v2:16;
  unsigned short v3:8;
};
//SIG(1 C_BFu16s_BFu8s) C1{ Fc Fs:16 Fs:8}



static void Test_C_BFu16s_BFu8s()
{
  {
    init_simple_test("C_BFu16s_BFu8s");
    static STRUCT_IF_C C_BFu16s_BFu8s lv;
    check2(sizeof(lv), 6, "sizeof(C_BFu16s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu16s_BFu8s)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu8s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "C_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "C_BFu16s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu8s, C_BFu16s_BFu8s)
//============================================================================


struct  C_BFu16s_BFu9i  {
  char v1;
  unsigned short v2:16;
  unsigned int v3:9;
};
//SIG(1 C_BFu16s_BFu9i) C1{ Fc Fs:16 Fi:9}



static void Test_C_BFu16s_BFu9i()
{
  {
    init_simple_test("C_BFu16s_BFu9i");
    static STRUCT_IF_C C_BFu16s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16s_BFu9i)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu9i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "C_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "C_BFu16s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu9i, C_BFu16s_BFu9i)
//============================================================================


struct  C_BFu16s_BFu9ll  {
  char v1;
  unsigned short v2:16;
  __tsu64 v3:9;
};
//SIG(1 C_BFu16s_BFu9ll) C1{ Fc Fs:16 FL:9}



static void Test_C_BFu16s_BFu9ll()
{
  {
    init_simple_test("C_BFu16s_BFu9ll");
    static STRUCT_IF_C C_BFu16s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16s_BFu9ll)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "C_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "C_BFu16s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu9ll, C_BFu16s_BFu9ll)
//============================================================================


struct  C_BFu16s_BFu9s  {
  char v1;
  unsigned short v2:16;
  unsigned short v3:9;
};
//SIG(1 C_BFu16s_BFu9s) C1{ Fc Fs:16 Fs:9}



static void Test_C_BFu16s_BFu9s()
{
  {
    init_simple_test("C_BFu16s_BFu9s");
    static STRUCT_IF_C C_BFu16s_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(C_BFu16s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu16s_BFu9s)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu9s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "C_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "C_BFu16s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu9s, C_BFu16s_BFu9s)
//============================================================================


struct  C_BFu16s_C  {
  char v1;
  unsigned short v2:16;
  char v3;
};
//SIG(1 C_BFu16s_C) C1{ Fc Fs:16 Fc}



static void Test_C_BFu16s_C()
{
  {
    init_simple_test("C_BFu16s_C");
    static STRUCT_IF_C C_BFu16s_C lv;
    check2(sizeof(lv), 6, "sizeof(C_BFu16s_C)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu16s_C)");
    check_field_offset(lv, v1, 0, "C_BFu16s_C.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_C");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_C");
    check_field_offset(lv, v3, 4, "C_BFu16s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_C, C_BFu16s_C)
//============================================================================


struct  C_BFu16s_D  {
  char v1;
  unsigned short v2:16;
  double v3;
};
//SIG(1 C_BFu16s_D) C1{ Fc Fs:16 FL}



static void Test_C_BFu16s_D()
{
  {
    init_simple_test("C_BFu16s_D");
    static STRUCT_IF_C C_BFu16s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu16s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16s_D)");
    check_field_offset(lv, v1, 0, "C_BFu16s_D.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_D");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu16s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_D, C_BFu16s_D)
//============================================================================


struct  C_BFu16s_F  {
  char v1;
  unsigned short v2:16;
  float v3;
};
//SIG(1 C_BFu16s_F) C1{ Fc Fs:16 Fi}



static void Test_C_BFu16s_F()
{
  {
    init_simple_test("C_BFu16s_F");
    static STRUCT_IF_C C_BFu16s_F lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16s_F)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16s_F)");
    check_field_offset(lv, v1, 0, "C_BFu16s_F.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_F");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_F");
    check_field_offset(lv, v3, 4, "C_BFu16s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_F, C_BFu16s_F)
//============================================================================


struct  C_BFu16s_I  {
  char v1;
  unsigned short v2:16;
  int v3;
};
//SIG(1 C_BFu16s_I) C1{ Fc Fs:16 Fi}



static void Test_C_BFu16s_I()
{
  {
    init_simple_test("C_BFu16s_I");
    static STRUCT_IF_C C_BFu16s_I lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16s_I)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16s_I)");
    check_field_offset(lv, v1, 0, "C_BFu16s_I.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_I");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_I");
    check_field_offset(lv, v3, 4, "C_BFu16s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_I, C_BFu16s_I)
//============================================================================


struct  C_BFu16s_Ip  {
  char v1;
  unsigned short v2:16;
  int *v3;
};
//SIG(1 C_BFu16s_Ip) C1{ Fc Fs:16 Fp}



static void Test_C_BFu16s_Ip()
{
  {
    init_simple_test("C_BFu16s_Ip");
    static STRUCT_IF_C C_BFu16s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu16s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16s_Ip)");
    check_field_offset(lv, v1, 0, "C_BFu16s_Ip.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu16s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_Ip, C_BFu16s_Ip)
//============================================================================


struct  C_BFu16s_L  {
  char v1;
  unsigned short v2:16;
  __tsi64 v3;
};
//SIG(1 C_BFu16s_L) C1{ Fc Fs:16 FL}



static void Test_C_BFu16s_L()
{
  {
    init_simple_test("C_BFu16s_L");
    static STRUCT_IF_C C_BFu16s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu16s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16s_L)");
    check_field_offset(lv, v1, 0, "C_BFu16s_L.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_L");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu16s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_L, C_BFu16s_L)
//============================================================================


struct  C_BFu16s_S  {
  char v1;
  unsigned short v2:16;
  short v3;
};
//SIG(1 C_BFu16s_S) C1{ Fc Fs:16 Fs}



static void Test_C_BFu16s_S()
{
  {
    init_simple_test("C_BFu16s_S");
    static STRUCT_IF_C C_BFu16s_S lv;
    check2(sizeof(lv), 6, "sizeof(C_BFu16s_S)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu16s_S)");
    check_field_offset(lv, v1, 0, "C_BFu16s_S.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_S");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_S");
    check_field_offset(lv, v3, 4, "C_BFu16s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_S, C_BFu16s_S)
//============================================================================


struct  C_BFu16s_Uc  {
  char v1;
  unsigned short v2:16;
  unsigned char v3;
};
//SIG(1 C_BFu16s_Uc) C1{ Fc Fs:16 Fc}



static void Test_C_BFu16s_Uc()
{
  {
    init_simple_test("C_BFu16s_Uc");
    static STRUCT_IF_C C_BFu16s_Uc lv;
    check2(sizeof(lv), 6, "sizeof(C_BFu16s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu16s_Uc)");
    check_field_offset(lv, v1, 0, "C_BFu16s_Uc.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_Uc");
    check_field_offset(lv, v3, 4, "C_BFu16s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_Uc, C_BFu16s_Uc)
//============================================================================


struct  C_BFu16s_Ui  {
  char v1;
  unsigned short v2:16;
  unsigned int v3;
};
//SIG(1 C_BFu16s_Ui) C1{ Fc Fs:16 Fi}



static void Test_C_BFu16s_Ui()
{
  {
    init_simple_test("C_BFu16s_Ui");
    static STRUCT_IF_C C_BFu16s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu16s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16s_Ui)");
    check_field_offset(lv, v1, 0, "C_BFu16s_Ui.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_Ui");
    check_field_offset(lv, v3, 4, "C_BFu16s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_Ui, C_BFu16s_Ui)
//============================================================================


struct  C_BFu16s_Ul  {
  char v1;
  unsigned short v2:16;
  __tsu64 v3;
};
//SIG(1 C_BFu16s_Ul) C1{ Fc Fs:16 FL}



static void Test_C_BFu16s_Ul()
{
  {
    init_simple_test("C_BFu16s_Ul");
    static STRUCT_IF_C C_BFu16s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu16s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16s_Ul)");
    check_field_offset(lv, v1, 0, "C_BFu16s_Ul.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu16s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_Ul, C_BFu16s_Ul)
//============================================================================


struct  C_BFu16s_Us  {
  char v1;
  unsigned short v2:16;
  unsigned short v3;
};
//SIG(1 C_BFu16s_Us) C1{ Fc Fs:16 Fs}



static void Test_C_BFu16s_Us()
{
  {
    init_simple_test("C_BFu16s_Us");
    static STRUCT_IF_C C_BFu16s_Us lv;
    check2(sizeof(lv), 6, "sizeof(C_BFu16s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu16s_Us)");
    check_field_offset(lv, v1, 0, "C_BFu16s_Us.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_Us");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_Us");
    check_field_offset(lv, v3, 4, "C_BFu16s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_Us, C_BFu16s_Us)
//============================================================================


struct  C_BFu16s_Vp  {
  char v1;
  unsigned short v2:16;
  void *v3;
};
//SIG(1 C_BFu16s_Vp) C1{ Fc Fs:16 Fp}



static void Test_C_BFu16s_Vp()
{
  {
    init_simple_test("C_BFu16s_Vp");
    static STRUCT_IF_C C_BFu16s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu16s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16s_Vp)");
    check_field_offset(lv, v1, 0, "C_BFu16s_Vp.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu16s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_Vp, C_BFu16s_Vp)
//============================================================================


struct  C_BFu17i  {
  char v1;
  unsigned int v2:17;
};
//SIG(1 C_BFu17i) C1{ Fc Fi:17}



static void Test_C_BFu17i()
{
  {
    init_simple_test("C_BFu17i");
    static STRUCT_IF_C C_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i)");
    check_field_offset(lv, v1, 0, "C_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i, C_BFu17i)
//============================================================================


struct  C_BFu17i_BFu15i  {
  char v1;
  unsigned int v2:17;
  unsigned int v3:15;
};
//SIG(1 C_BFu17i_BFu15i) C1{ Fc Fi:17 Fi:15}



static void Test_C_BFu17i_BFu15i()
{
  {
    init_simple_test("C_BFu17i_BFu15i");
    static STRUCT_IF_C C_BFu17i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i_BFu15i)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "C_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "C_BFu17i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu15i, C_BFu17i_BFu15i)
//============================================================================


struct  C_BFu17i_BFu15ll  {
  char v1;
  unsigned int v2:17;
  __tsu64 v3:15;
};
//SIG(1 C_BFu17i_BFu15ll) C1{ Fc Fi:17 FL:15}



static void Test_C_BFu17i_BFu15ll()
{
  {
    init_simple_test("C_BFu17i_BFu15ll");
    static STRUCT_IF_C C_BFu17i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17i_BFu15ll)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, 1, "C_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, hide_ull(1LL<<14), "C_BFu17i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu15ll, C_BFu17i_BFu15ll)
//============================================================================


struct  C_BFu17i_BFu15s  {
  char v1;
  unsigned int v2:17;
  unsigned short v3:15;
};
//SIG(1 C_BFu17i_BFu15s) C1{ Fc Fi:17 Fs:15}



static void Test_C_BFu17i_BFu15s()
{
  {
    init_simple_test("C_BFu17i_BFu15s");
    static STRUCT_IF_C C_BFu17i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i_BFu15s)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "C_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "C_BFu17i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu15s, C_BFu17i_BFu15s)
//============================================================================


struct  C_BFu17i_BFu16i  {
  char v1;
  unsigned int v2:17;
  unsigned int v3:16;
};
//SIG(1 C_BFu17i_BFu16i) C1{ Fc Fi:17 Fi:16}



static void Test_C_BFu17i_BFu16i()
{
  {
    init_simple_test("C_BFu17i_BFu16i");
    static STRUCT_IF_C C_BFu17i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i_BFu16i)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "C_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "C_BFu17i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu16i, C_BFu17i_BFu16i)
//============================================================================


struct  C_BFu17i_BFu16ll  {
  char v1;
  unsigned int v2:17;
  __tsu64 v3:16;
};
//SIG(1 C_BFu17i_BFu16ll) C1{ Fc Fi:17 FL:16}



static void Test_C_BFu17i_BFu16ll()
{
  {
    init_simple_test("C_BFu17i_BFu16ll");
    static STRUCT_IF_C C_BFu17i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17i_BFu16ll)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, 1, "C_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, hide_ull(1LL<<15), "C_BFu17i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu16ll, C_BFu17i_BFu16ll)
//============================================================================


struct  C_BFu17i_BFu16s  {
  char v1;
  unsigned int v2:17;
  unsigned short v3:16;
};
//SIG(1 C_BFu17i_BFu16s) C1{ Fc Fi:17 Fs:16}



static void Test_C_BFu17i_BFu16s()
{
  {
    init_simple_test("C_BFu17i_BFu16s");
    static STRUCT_IF_C C_BFu17i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i_BFu16s)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "C_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "C_BFu17i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu16s, C_BFu17i_BFu16s)
//============================================================================


struct  C_BFu17i_BFu17i  {
  char v1;
  unsigned int v2:17;
  unsigned int v3:17;
};
//SIG(1 C_BFu17i_BFu17i) C1{ Fc Fi:17 Fi:17}



static void Test_C_BFu17i_BFu17i()
{
  {
    init_simple_test("C_BFu17i_BFu17i");
    static STRUCT_IF_C C_BFu17i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i_BFu17i)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "C_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu17i, C_BFu17i_BFu17i)
//============================================================================


struct  C_BFu17i_BFu17ll  {
  char v1;
  unsigned int v2:17;
  __tsu64 v3:17;
};
//SIG(1 C_BFu17i_BFu17ll) C1{ Fc Fi:17 FL:17}



static void Test_C_BFu17i_BFu17ll()
{
  {
    init_simple_test("C_BFu17i_BFu17ll");
    static STRUCT_IF_C C_BFu17i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17i_BFu17ll)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, 1, "C_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, hide_ull(1LL<<16), "C_BFu17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu17ll, C_BFu17i_BFu17ll)
//============================================================================


struct  C_BFu17i_BFu1c  {
  char v1;
  unsigned int v2:17;
  unsigned char v3:1;
};
//SIG(1 C_BFu17i_BFu1c) C1{ Fc Fi:17 Fc:1}



static void Test_C_BFu17i_BFu1c()
{
  {
    init_simple_test("C_BFu17i_BFu1c");
    static STRUCT_IF_C C_BFu17i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu17i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i_BFu1c)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu1c");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "C_BFu17i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu1c, C_BFu17i_BFu1c)
//============================================================================


struct  C_BFu17i_BFu1i  {
  char v1;
  unsigned int v2:17;
  unsigned int v3:1;
};
//SIG(1 C_BFu17i_BFu1i) C1{ Fc Fi:17 Fi:1}



static void Test_C_BFu17i_BFu1i()
{
  {
    init_simple_test("C_BFu17i_BFu1i");
    static STRUCT_IF_C C_BFu17i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu17i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i_BFu1i)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu1i");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "C_BFu17i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu1i, C_BFu17i_BFu1i)
//============================================================================


struct  C_BFu17i_BFu1ll  {
  char v1;
  unsigned int v2:17;
  __tsu64 v3:1;
};
//SIG(1 C_BFu17i_BFu1ll) C1{ Fc Fi:17 FL:1}



static void Test_C_BFu17i_BFu1ll()
{
  {
    init_simple_test("C_BFu17i_BFu1ll");
    static STRUCT_IF_C C_BFu17i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu17i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17i_BFu1ll)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu1ll");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "C_BFu17i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu1ll, C_BFu17i_BFu1ll)
//============================================================================


struct  C_BFu17i_BFu1s  {
  char v1;
  unsigned int v2:17;
  unsigned short v3:1;
};
//SIG(1 C_BFu17i_BFu1s) C1{ Fc Fi:17 Fs:1}



static void Test_C_BFu17i_BFu1s()
{
  {
    init_simple_test("C_BFu17i_BFu1s");
    static STRUCT_IF_C C_BFu17i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu17i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i_BFu1s)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu1s");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "C_BFu17i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu1s, C_BFu17i_BFu1s)
//============================================================================


struct  C_BFu17i_BFu31i  {
  char v1;
  unsigned int v2:17;
  unsigned int v3:31;
};
//SIG(1 C_BFu17i_BFu31i) C1{ Fc Fi:17 Fi:31}



static void Test_C_BFu17i_BFu31i()
{
  {
    init_simple_test("C_BFu17i_BFu31i");
    static STRUCT_IF_C C_BFu17i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i_BFu31i)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "C_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "C_BFu17i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu31i, C_BFu17i_BFu31i)
//============================================================================


struct  C_BFu17i_BFu31ll  {
  char v1;
  unsigned int v2:17;
  __tsu64 v3:31;
};
//SIG(1 C_BFu17i_BFu31ll) C1{ Fc Fi:17 FL:31}



static void Test_C_BFu17i_BFu31ll()
{
  {
    init_simple_test("C_BFu17i_BFu31ll");
    static STRUCT_IF_C C_BFu17i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17i_BFu31ll)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, 1, "C_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, hide_ull(1LL<<30), "C_BFu17i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu31ll, C_BFu17i_BFu31ll)
//============================================================================


struct  C_BFu17i_BFu32i  {
  char v1;
  unsigned int v2:17;
  unsigned int v3:32;
};
//SIG(1 C_BFu17i_BFu32i) C1{ Fc Fi:17 Fi:32}



static void Test_C_BFu17i_BFu32i()
{
  {
    init_simple_test("C_BFu17i_BFu32i");
    static STRUCT_IF_C C_BFu17i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i_BFu32i)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "C_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "C_BFu17i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu32i, C_BFu17i_BFu32i)
//============================================================================


struct  C_BFu17i_BFu32ll  {
  char v1;
  unsigned int v2:17;
  __tsu64 v3:32;
};
//SIG(1 C_BFu17i_BFu32ll) C1{ Fc Fi:17 FL:32}



static void Test_C_BFu17i_BFu32ll()
{
  {
    init_simple_test("C_BFu17i_BFu32ll");
    static STRUCT_IF_C C_BFu17i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17i_BFu32ll)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, 1, "C_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, hide_ull(1LL<<31), "C_BFu17i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu32ll, C_BFu17i_BFu32ll)
//============================================================================


struct  C_BFu17i_BFu33  {
  char v1;
  unsigned int v2:17;
  __tsu64 v3:33;
};
//SIG(1 C_BFu17i_BFu33) C1{ Fc Fi:17 FL:33}



static void Test_C_BFu17i_BFu33()
{
  {
    init_simple_test("C_BFu17i_BFu33");
    static STRUCT_IF_C C_BFu17i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17i_BFu33)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, 1, "C_BFu17i_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, hide_ull(1LL<<32), "C_BFu17i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu33, C_BFu17i_BFu33)
//============================================================================


struct  C_BFu17i_BFu7c  {
  char v1;
  unsigned int v2:17;
  unsigned char v3:7;
};
//SIG(1 C_BFu17i_BFu7c) C1{ Fc Fi:17 Fc:7}



static void Test_C_BFu17i_BFu7c()
{
  {
    init_simple_test("C_BFu17i_BFu7c");
    static STRUCT_IF_C C_BFu17i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu17i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i_BFu7c)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "C_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "C_BFu17i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu7c, C_BFu17i_BFu7c)
//============================================================================


struct  C_BFu17i_BFu7i  {
  char v1;
  unsigned int v2:17;
  unsigned int v3:7;
};
//SIG(1 C_BFu17i_BFu7i) C1{ Fc Fi:17 Fi:7}



static void Test_C_BFu17i_BFu7i()
{
  {
    init_simple_test("C_BFu17i_BFu7i");
    static STRUCT_IF_C C_BFu17i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu17i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i_BFu7i)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "C_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "C_BFu17i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu7i, C_BFu17i_BFu7i)
//============================================================================


struct  C_BFu17i_BFu7ll  {
  char v1;
  unsigned int v2:17;
  __tsu64 v3:7;
};
//SIG(1 C_BFu17i_BFu7ll) C1{ Fc Fi:17 FL:7}



static void Test_C_BFu17i_BFu7ll()
{
  {
    init_simple_test("C_BFu17i_BFu7ll");
    static STRUCT_IF_C C_BFu17i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu17i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17i_BFu7ll)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "C_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "C_BFu17i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu7ll, C_BFu17i_BFu7ll)
//============================================================================


struct  C_BFu17i_BFu7s  {
  char v1;
  unsigned int v2:17;
  unsigned short v3:7;
};
//SIG(1 C_BFu17i_BFu7s) C1{ Fc Fi:17 Fs:7}



static void Test_C_BFu17i_BFu7s()
{
  {
    init_simple_test("C_BFu17i_BFu7s");
    static STRUCT_IF_C C_BFu17i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu17i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i_BFu7s)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "C_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "C_BFu17i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu7s, C_BFu17i_BFu7s)
//============================================================================


struct  C_BFu17i_BFu8c  {
  char v1;
  unsigned int v2:17;
  unsigned char v3:8;
};
//SIG(1 C_BFu17i_BFu8c) C1{ Fc Fi:17 Fc:8}



static void Test_C_BFu17i_BFu8c()
{
  {
    init_simple_test("C_BFu17i_BFu8c");
    static STRUCT_IF_C C_BFu17i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i_BFu8c)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "C_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "C_BFu17i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu8c, C_BFu17i_BFu8c)
//============================================================================


struct  C_BFu17i_BFu8i  {
  char v1;
  unsigned int v2:17;
  unsigned int v3:8;
};
//SIG(1 C_BFu17i_BFu8i) C1{ Fc Fi:17 Fi:8}



static void Test_C_BFu17i_BFu8i()
{
  {
    init_simple_test("C_BFu17i_BFu8i");
    static STRUCT_IF_C C_BFu17i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i_BFu8i)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "C_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "C_BFu17i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu8i, C_BFu17i_BFu8i)
//============================================================================


struct  C_BFu17i_BFu8ll  {
  char v1;
  unsigned int v2:17;
  __tsu64 v3:8;
};
//SIG(1 C_BFu17i_BFu8ll) C1{ Fc Fi:17 FL:8}



static void Test_C_BFu17i_BFu8ll()
{
  {
    init_simple_test("C_BFu17i_BFu8ll");
    static STRUCT_IF_C C_BFu17i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17i_BFu8ll)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, 1, "C_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, hide_ull(1LL<<7), "C_BFu17i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu8ll, C_BFu17i_BFu8ll)
//============================================================================


struct  C_BFu17i_BFu8s  {
  char v1;
  unsigned int v2:17;
  unsigned short v3:8;
};
//SIG(1 C_BFu17i_BFu8s) C1{ Fc Fi:17 Fs:8}



static void Test_C_BFu17i_BFu8s()
{
  {
    init_simple_test("C_BFu17i_BFu8s");
    static STRUCT_IF_C C_BFu17i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i_BFu8s)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "C_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "C_BFu17i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu8s, C_BFu17i_BFu8s)
//============================================================================


struct  C_BFu17i_BFu9i  {
  char v1;
  unsigned int v2:17;
  unsigned int v3:9;
};
//SIG(1 C_BFu17i_BFu9i) C1{ Fc Fi:17 Fi:9}



static void Test_C_BFu17i_BFu9i()
{
  {
    init_simple_test("C_BFu17i_BFu9i");
    static STRUCT_IF_C C_BFu17i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i_BFu9i)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "C_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "C_BFu17i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu9i, C_BFu17i_BFu9i)
//============================================================================


struct  C_BFu17i_BFu9ll  {
  char v1;
  unsigned int v2:17;
  __tsu64 v3:9;
};
//SIG(1 C_BFu17i_BFu9ll) C1{ Fc Fi:17 FL:9}



static void Test_C_BFu17i_BFu9ll()
{
  {
    init_simple_test("C_BFu17i_BFu9ll");
    static STRUCT_IF_C C_BFu17i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17i_BFu9ll)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "C_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "C_BFu17i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu9ll, C_BFu17i_BFu9ll)
//============================================================================


struct  C_BFu17i_BFu9s  {
  char v1;
  unsigned int v2:17;
  unsigned short v3:9;
};
//SIG(1 C_BFu17i_BFu9s) C1{ Fc Fi:17 Fs:9}



static void Test_C_BFu17i_BFu9s()
{
  {
    init_simple_test("C_BFu17i_BFu9s");
    static STRUCT_IF_C C_BFu17i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i_BFu9s)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "C_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "C_BFu17i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu9s, C_BFu17i_BFu9s)
//============================================================================


struct  C_BFu17i_C  {
  char v1;
  unsigned int v2:17;
  char v3;
};
//SIG(1 C_BFu17i_C) C1{ Fc Fi:17 Fc}



static void Test_C_BFu17i_C()
{
  {
    init_simple_test("C_BFu17i_C");
    static STRUCT_IF_C C_BFu17i_C lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17i_C)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i_C)");
    check_field_offset(lv, v1, 0, "C_BFu17i_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_C");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_C");
    check_field_offset(lv, v3, 4, "C_BFu17i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_C, C_BFu17i_C)
//============================================================================


struct  C_BFu17i_D  {
  char v1;
  unsigned int v2:17;
  double v3;
};
//SIG(1 C_BFu17i_D) C1{ Fc Fi:17 FL}



static void Test_C_BFu17i_D()
{
  {
    init_simple_test("C_BFu17i_D");
    static STRUCT_IF_C C_BFu17i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu17i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17i_D)");
    check_field_offset(lv, v1, 0, "C_BFu17i_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_D");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu17i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_D, C_BFu17i_D)
//============================================================================


struct  C_BFu17i_F  {
  char v1;
  unsigned int v2:17;
  float v3;
};
//SIG(1 C_BFu17i_F) C1{ Fc Fi:17 Fi}



static void Test_C_BFu17i_F()
{
  {
    init_simple_test("C_BFu17i_F");
    static STRUCT_IF_C C_BFu17i_F lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17i_F)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i_F)");
    check_field_offset(lv, v1, 0, "C_BFu17i_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_F");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_F");
    check_field_offset(lv, v3, 4, "C_BFu17i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_F, C_BFu17i_F)
//============================================================================


struct  C_BFu17i_I  {
  char v1;
  unsigned int v2:17;
  int v3;
};
//SIG(1 C_BFu17i_I) C1{ Fc Fi:17 Fi}



static void Test_C_BFu17i_I()
{
  {
    init_simple_test("C_BFu17i_I");
    static STRUCT_IF_C C_BFu17i_I lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17i_I)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i_I)");
    check_field_offset(lv, v1, 0, "C_BFu17i_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_I");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_I");
    check_field_offset(lv, v3, 4, "C_BFu17i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_I, C_BFu17i_I)
//============================================================================


struct  C_BFu17i_Ip  {
  char v1;
  unsigned int v2:17;
  int *v3;
};
//SIG(1 C_BFu17i_Ip) C1{ Fc Fi:17 Fp}



static void Test_C_BFu17i_Ip()
{
  {
    init_simple_test("C_BFu17i_Ip");
    static STRUCT_IF_C C_BFu17i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu17i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17i_Ip)");
    check_field_offset(lv, v1, 0, "C_BFu17i_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_Ip");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu17i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_Ip, C_BFu17i_Ip)
//============================================================================


struct  C_BFu17i_L  {
  char v1;
  unsigned int v2:17;
  __tsi64 v3;
};
//SIG(1 C_BFu17i_L) C1{ Fc Fi:17 FL}



static void Test_C_BFu17i_L()
{
  {
    init_simple_test("C_BFu17i_L");
    static STRUCT_IF_C C_BFu17i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu17i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17i_L)");
    check_field_offset(lv, v1, 0, "C_BFu17i_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_L");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu17i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_L, C_BFu17i_L)
//============================================================================


struct  C_BFu17i_S  {
  char v1;
  unsigned int v2:17;
  short v3;
};
//SIG(1 C_BFu17i_S) C1{ Fc Fi:17 Fs}



static void Test_C_BFu17i_S()
{
  {
    init_simple_test("C_BFu17i_S");
    static STRUCT_IF_C C_BFu17i_S lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17i_S)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i_S)");
    check_field_offset(lv, v1, 0, "C_BFu17i_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_S");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_S");
    check_field_offset(lv, v3, 4, "C_BFu17i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_S, C_BFu17i_S)
//============================================================================


struct  C_BFu17i_Uc  {
  char v1;
  unsigned int v2:17;
  unsigned char v3;
};
//SIG(1 C_BFu17i_Uc) C1{ Fc Fi:17 Fc}



static void Test_C_BFu17i_Uc()
{
  {
    init_simple_test("C_BFu17i_Uc");
    static STRUCT_IF_C C_BFu17i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i_Uc)");
    check_field_offset(lv, v1, 0, "C_BFu17i_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_Uc");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_Uc");
    check_field_offset(lv, v3, 4, "C_BFu17i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_Uc, C_BFu17i_Uc)
//============================================================================


struct  C_BFu17i_Ui  {
  char v1;
  unsigned int v2:17;
  unsigned int v3;
};
//SIG(1 C_BFu17i_Ui) C1{ Fc Fi:17 Fi}



static void Test_C_BFu17i_Ui()
{
  {
    init_simple_test("C_BFu17i_Ui");
    static STRUCT_IF_C C_BFu17i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i_Ui)");
    check_field_offset(lv, v1, 0, "C_BFu17i_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_Ui");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_Ui");
    check_field_offset(lv, v3, 4, "C_BFu17i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_Ui, C_BFu17i_Ui)
//============================================================================


struct  C_BFu17i_Ul  {
  char v1;
  unsigned int v2:17;
  __tsu64 v3;
};
//SIG(1 C_BFu17i_Ul) C1{ Fc Fi:17 FL}



static void Test_C_BFu17i_Ul()
{
  {
    init_simple_test("C_BFu17i_Ul");
    static STRUCT_IF_C C_BFu17i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu17i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17i_Ul)");
    check_field_offset(lv, v1, 0, "C_BFu17i_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_Ul");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu17i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_Ul, C_BFu17i_Ul)
//============================================================================


struct  C_BFu17i_Us  {
  char v1;
  unsigned int v2:17;
  unsigned short v3;
};
//SIG(1 C_BFu17i_Us) C1{ Fc Fi:17 Fs}



static void Test_C_BFu17i_Us()
{
  {
    init_simple_test("C_BFu17i_Us");
    static STRUCT_IF_C C_BFu17i_Us lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i_Us)");
    check_field_offset(lv, v1, 0, "C_BFu17i_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_Us");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_Us");
    check_field_offset(lv, v3, 4, "C_BFu17i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_Us, C_BFu17i_Us)
//============================================================================


struct  C_BFu17i_Vp  {
  char v1;
  unsigned int v2:17;
  void *v3;
};
//SIG(1 C_BFu17i_Vp) C1{ Fc Fi:17 Fp}



static void Test_C_BFu17i_Vp()
{
  {
    init_simple_test("C_BFu17i_Vp");
    static STRUCT_IF_C C_BFu17i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu17i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17i_Vp)");
    check_field_offset(lv, v1, 0, "C_BFu17i_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_Vp");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu17i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_Vp, C_BFu17i_Vp)
//============================================================================


struct  C_BFu17ll  {
  char v1;
  __tsu64 v2:17;
};
//SIG(1 C_BFu17ll) C1{ Fc FL:17}



static void Test_C_BFu17ll()
{
  {
    init_simple_test("C_BFu17ll");
    static STRUCT_IF_C C_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll)");
    check_field_offset(lv, v1, 0, "C_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll, C_BFu17ll)
//============================================================================


struct  C_BFu17ll_BFu15i  {
  char v1;
  __tsu64 v2:17;
  unsigned int v3:15;
};
//SIG(1 C_BFu17ll_BFu15i) C1{ Fc FL:17 Fi:15}



static void Test_C_BFu17ll_BFu15i()
{
  {
    init_simple_test("C_BFu17ll_BFu15i");
    static STRUCT_IF_C C_BFu17ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu15i)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "C_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "C_BFu17ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu15i, C_BFu17ll_BFu15i)
//============================================================================


struct  C_BFu17ll_BFu15ll  {
  char v1;
  __tsu64 v2:17;
  __tsu64 v3:15;
};
//SIG(1 C_BFu17ll_BFu15ll) C1{ Fc FL:17 FL:15}



static void Test_C_BFu17ll_BFu15ll()
{
  {
    init_simple_test("C_BFu17ll_BFu15ll");
    static STRUCT_IF_C C_BFu17ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, 1, "C_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, hide_ull(1LL<<14), "C_BFu17ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu15ll, C_BFu17ll_BFu15ll)
//============================================================================


struct  C_BFu17ll_BFu15s  {
  char v1;
  __tsu64 v2:17;
  unsigned short v3:15;
};
//SIG(1 C_BFu17ll_BFu15s) C1{ Fc FL:17 Fs:15}



static void Test_C_BFu17ll_BFu15s()
{
  {
    init_simple_test("C_BFu17ll_BFu15s");
    static STRUCT_IF_C C_BFu17ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu15s)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "C_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "C_BFu17ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu15s, C_BFu17ll_BFu15s)
//============================================================================


struct  C_BFu17ll_BFu16i  {
  char v1;
  __tsu64 v2:17;
  unsigned int v3:16;
};
//SIG(1 C_BFu17ll_BFu16i) C1{ Fc FL:17 Fi:16}



static void Test_C_BFu17ll_BFu16i()
{
  {
    init_simple_test("C_BFu17ll_BFu16i");
    static STRUCT_IF_C C_BFu17ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu16i)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "C_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "C_BFu17ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu16i, C_BFu17ll_BFu16i)
//============================================================================


struct  C_BFu17ll_BFu16ll  {
  char v1;
  __tsu64 v2:17;
  __tsu64 v3:16;
};
//SIG(1 C_BFu17ll_BFu16ll) C1{ Fc FL:17 FL:16}



static void Test_C_BFu17ll_BFu16ll()
{
  {
    init_simple_test("C_BFu17ll_BFu16ll");
    static STRUCT_IF_C C_BFu17ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, 1, "C_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, hide_ull(1LL<<15), "C_BFu17ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu16ll, C_BFu17ll_BFu16ll)
//============================================================================


struct  C_BFu17ll_BFu16s  {
  char v1;
  __tsu64 v2:17;
  unsigned short v3:16;
};
//SIG(1 C_BFu17ll_BFu16s) C1{ Fc FL:17 Fs:16}



static void Test_C_BFu17ll_BFu16s()
{
  {
    init_simple_test("C_BFu17ll_BFu16s");
    static STRUCT_IF_C C_BFu17ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu16s)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "C_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "C_BFu17ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu16s, C_BFu17ll_BFu16s)
//============================================================================


struct  C_BFu17ll_BFu17i  {
  char v1;
  __tsu64 v2:17;
  unsigned int v3:17;
};
//SIG(1 C_BFu17ll_BFu17i) C1{ Fc FL:17 Fi:17}



static void Test_C_BFu17ll_BFu17i()
{
  {
    init_simple_test("C_BFu17ll_BFu17i");
    static STRUCT_IF_C C_BFu17ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu17i)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "C_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu17i, C_BFu17ll_BFu17i)
//============================================================================


struct  C_BFu17ll_BFu17ll  {
  char v1;
  __tsu64 v2:17;
  __tsu64 v3:17;
};
//SIG(1 C_BFu17ll_BFu17ll) C1{ Fc FL:17 FL:17}



static void Test_C_BFu17ll_BFu17ll()
{
  {
    init_simple_test("C_BFu17ll_BFu17ll");
    static STRUCT_IF_C C_BFu17ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, 1, "C_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu17ll, C_BFu17ll_BFu17ll)
//============================================================================


struct  C_BFu17ll_BFu1c  {
  char v1;
  __tsu64 v2:17;
  unsigned char v3:1;
};
//SIG(1 C_BFu17ll_BFu1c) C1{ Fc FL:17 Fc:1}



static void Test_C_BFu17ll_BFu1c()
{
  {
    init_simple_test("C_BFu17ll_BFu1c");
    static STRUCT_IF_C C_BFu17ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu17ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu1c)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu1c");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "C_BFu17ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu1c, C_BFu17ll_BFu1c)
//============================================================================


struct  C_BFu17ll_BFu1i  {
  char v1;
  __tsu64 v2:17;
  unsigned int v3:1;
};
//SIG(1 C_BFu17ll_BFu1i) C1{ Fc FL:17 Fi:1}



static void Test_C_BFu17ll_BFu1i()
{
  {
    init_simple_test("C_BFu17ll_BFu1i");
    static STRUCT_IF_C C_BFu17ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu17ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu1i)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu1i");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "C_BFu17ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu1i, C_BFu17ll_BFu1i)
//============================================================================


struct  C_BFu17ll_BFu1ll  {
  char v1;
  __tsu64 v2:17;
  __tsu64 v3:1;
};
//SIG(1 C_BFu17ll_BFu1ll) C1{ Fc FL:17 FL:1}



static void Test_C_BFu17ll_BFu1ll()
{
  {
    init_simple_test("C_BFu17ll_BFu1ll");
    static STRUCT_IF_C C_BFu17ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu17ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "C_BFu17ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu1ll, C_BFu17ll_BFu1ll)
//============================================================================


struct  C_BFu17ll_BFu1s  {
  char v1;
  __tsu64 v2:17;
  unsigned short v3:1;
};
//SIG(1 C_BFu17ll_BFu1s) C1{ Fc FL:17 Fs:1}



static void Test_C_BFu17ll_BFu1s()
{
  {
    init_simple_test("C_BFu17ll_BFu1s");
    static STRUCT_IF_C C_BFu17ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu17ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu1s)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu1s");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "C_BFu17ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu1s, C_BFu17ll_BFu1s)
//============================================================================


struct  C_BFu17ll_BFu31i  {
  char v1;
  __tsu64 v2:17;
  unsigned int v3:31;
};
//SIG(1 C_BFu17ll_BFu31i) C1{ Fc FL:17 Fi:31}



static void Test_C_BFu17ll_BFu31i()
{
  {
    init_simple_test("C_BFu17ll_BFu31i");
    static STRUCT_IF_C C_BFu17ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu31i)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "C_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "C_BFu17ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu31i, C_BFu17ll_BFu31i)
//============================================================================


struct  C_BFu17ll_BFu31ll  {
  char v1;
  __tsu64 v2:17;
  __tsu64 v3:31;
};
//SIG(1 C_BFu17ll_BFu31ll) C1{ Fc FL:17 FL:31}



static void Test_C_BFu17ll_BFu31ll()
{
  {
    init_simple_test("C_BFu17ll_BFu31ll");
    static STRUCT_IF_C C_BFu17ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, 1, "C_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, hide_ull(1LL<<30), "C_BFu17ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu31ll, C_BFu17ll_BFu31ll)
//============================================================================


struct  C_BFu17ll_BFu32i  {
  char v1;
  __tsu64 v2:17;
  unsigned int v3:32;
};
//SIG(1 C_BFu17ll_BFu32i) C1{ Fc FL:17 Fi:32}



static void Test_C_BFu17ll_BFu32i()
{
  {
    init_simple_test("C_BFu17ll_BFu32i");
    static STRUCT_IF_C C_BFu17ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu32i)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "C_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "C_BFu17ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu32i, C_BFu17ll_BFu32i)
//============================================================================


struct  C_BFu17ll_BFu32ll  {
  char v1;
  __tsu64 v2:17;
  __tsu64 v3:32;
};
//SIG(1 C_BFu17ll_BFu32ll) C1{ Fc FL:17 FL:32}



static void Test_C_BFu17ll_BFu32ll()
{
  {
    init_simple_test("C_BFu17ll_BFu32ll");
    static STRUCT_IF_C C_BFu17ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, 1, "C_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, hide_ull(1LL<<31), "C_BFu17ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu32ll, C_BFu17ll_BFu32ll)
//============================================================================


struct  C_BFu17ll_BFu33  {
  char v1;
  __tsu64 v2:17;
  __tsu64 v3:33;
};
//SIG(1 C_BFu17ll_BFu33) C1{ Fc FL:17 FL:33}



static void Test_C_BFu17ll_BFu33()
{
  {
    init_simple_test("C_BFu17ll_BFu33");
    static STRUCT_IF_C C_BFu17ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu33)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, 1, "C_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, hide_ull(1LL<<32), "C_BFu17ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu33, C_BFu17ll_BFu33)
//============================================================================


struct  C_BFu17ll_BFu7c  {
  char v1;
  __tsu64 v2:17;
  unsigned char v3:7;
};
//SIG(1 C_BFu17ll_BFu7c) C1{ Fc FL:17 Fc:7}



static void Test_C_BFu17ll_BFu7c()
{
  {
    init_simple_test("C_BFu17ll_BFu7c");
    static STRUCT_IF_C C_BFu17ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu17ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu7c)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "C_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "C_BFu17ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu7c, C_BFu17ll_BFu7c)
//============================================================================


struct  C_BFu17ll_BFu7i  {
  char v1;
  __tsu64 v2:17;
  unsigned int v3:7;
};
//SIG(1 C_BFu17ll_BFu7i) C1{ Fc FL:17 Fi:7}



static void Test_C_BFu17ll_BFu7i()
{
  {
    init_simple_test("C_BFu17ll_BFu7i");
    static STRUCT_IF_C C_BFu17ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu17ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu7i)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "C_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "C_BFu17ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu7i, C_BFu17ll_BFu7i)
//============================================================================


struct  C_BFu17ll_BFu7ll  {
  char v1;
  __tsu64 v2:17;
  __tsu64 v3:7;
};
//SIG(1 C_BFu17ll_BFu7ll) C1{ Fc FL:17 FL:7}



static void Test_C_BFu17ll_BFu7ll()
{
  {
    init_simple_test("C_BFu17ll_BFu7ll");
    static STRUCT_IF_C C_BFu17ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu17ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "C_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "C_BFu17ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu7ll, C_BFu17ll_BFu7ll)
//============================================================================


struct  C_BFu17ll_BFu7s  {
  char v1;
  __tsu64 v2:17;
  unsigned short v3:7;
};
//SIG(1 C_BFu17ll_BFu7s) C1{ Fc FL:17 Fs:7}



static void Test_C_BFu17ll_BFu7s()
{
  {
    init_simple_test("C_BFu17ll_BFu7s");
    static STRUCT_IF_C C_BFu17ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu17ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu7s)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "C_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "C_BFu17ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu7s, C_BFu17ll_BFu7s)
//============================================================================


struct  C_BFu17ll_BFu8c  {
  char v1;
  __tsu64 v2:17;
  unsigned char v3:8;
};
//SIG(1 C_BFu17ll_BFu8c) C1{ Fc FL:17 Fc:8}



static void Test_C_BFu17ll_BFu8c()
{
  {
    init_simple_test("C_BFu17ll_BFu8c");
    static STRUCT_IF_C C_BFu17ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu8c)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "C_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "C_BFu17ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu8c, C_BFu17ll_BFu8c)
//============================================================================


struct  C_BFu17ll_BFu8i  {
  char v1;
  __tsu64 v2:17;
  unsigned int v3:8;
};
//SIG(1 C_BFu17ll_BFu8i) C1{ Fc FL:17 Fi:8}



static void Test_C_BFu17ll_BFu8i()
{
  {
    init_simple_test("C_BFu17ll_BFu8i");
    static STRUCT_IF_C C_BFu17ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu8i)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "C_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "C_BFu17ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu8i, C_BFu17ll_BFu8i)
//============================================================================


struct  C_BFu17ll_BFu8ll  {
  char v1;
  __tsu64 v2:17;
  __tsu64 v3:8;
};
//SIG(1 C_BFu17ll_BFu8ll) C1{ Fc FL:17 FL:8}



static void Test_C_BFu17ll_BFu8ll()
{
  {
    init_simple_test("C_BFu17ll_BFu8ll");
    static STRUCT_IF_C C_BFu17ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, 1, "C_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, hide_ull(1LL<<7), "C_BFu17ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu8ll, C_BFu17ll_BFu8ll)
//============================================================================


struct  C_BFu17ll_BFu8s  {
  char v1;
  __tsu64 v2:17;
  unsigned short v3:8;
};
//SIG(1 C_BFu17ll_BFu8s) C1{ Fc FL:17 Fs:8}



static void Test_C_BFu17ll_BFu8s()
{
  {
    init_simple_test("C_BFu17ll_BFu8s");
    static STRUCT_IF_C C_BFu17ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu8s)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "C_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "C_BFu17ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu8s, C_BFu17ll_BFu8s)
//============================================================================


struct  C_BFu17ll_BFu9i  {
  char v1;
  __tsu64 v2:17;
  unsigned int v3:9;
};
//SIG(1 C_BFu17ll_BFu9i) C1{ Fc FL:17 Fi:9}



static void Test_C_BFu17ll_BFu9i()
{
  {
    init_simple_test("C_BFu17ll_BFu9i");
    static STRUCT_IF_C C_BFu17ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu9i)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "C_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "C_BFu17ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu9i, C_BFu17ll_BFu9i)
//============================================================================


struct  C_BFu17ll_BFu9ll  {
  char v1;
  __tsu64 v2:17;
  __tsu64 v3:9;
};
//SIG(1 C_BFu17ll_BFu9ll) C1{ Fc FL:17 FL:9}



static void Test_C_BFu17ll_BFu9ll()
{
  {
    init_simple_test("C_BFu17ll_BFu9ll");
    static STRUCT_IF_C C_BFu17ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "C_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "C_BFu17ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu9ll, C_BFu17ll_BFu9ll)
//============================================================================


struct  C_BFu17ll_BFu9s  {
  char v1;
  __tsu64 v2:17;
  unsigned short v3:9;
};
//SIG(1 C_BFu17ll_BFu9s) C1{ Fc FL:17 Fs:9}



static void Test_C_BFu17ll_BFu9s()
{
  {
    init_simple_test("C_BFu17ll_BFu9s");
    static STRUCT_IF_C C_BFu17ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu9s)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "C_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "C_BFu17ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu9s, C_BFu17ll_BFu9s)
//============================================================================


struct  C_BFu17ll_C  {
  char v1;
  __tsu64 v2:17;
  char v3;
};
//SIG(1 C_BFu17ll_C) C1{ Fc FL:17 Fc}



static void Test_C_BFu17ll_C()
{
  {
    init_simple_test("C_BFu17ll_C");
    static STRUCT_IF_C C_BFu17ll_C lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_C)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_C");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_C");
    check_field_offset(lv, v3, 4, "C_BFu17ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_C, C_BFu17ll_C)
//============================================================================


struct  C_BFu17ll_D  {
  char v1;
  __tsu64 v2:17;
  double v3;
};
//SIG(1 C_BFu17ll_D) C1{ Fc FL:17 FL}



static void Test_C_BFu17ll_D()
{
  {
    init_simple_test("C_BFu17ll_D");
    static STRUCT_IF_C C_BFu17ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu17ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_D)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_D");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu17ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_D, C_BFu17ll_D)
//============================================================================


struct  C_BFu17ll_F  {
  char v1;
  __tsu64 v2:17;
  float v3;
};
//SIG(1 C_BFu17ll_F) C1{ Fc FL:17 Fi}



static void Test_C_BFu17ll_F()
{
  {
    init_simple_test("C_BFu17ll_F");
    static STRUCT_IF_C C_BFu17ll_F lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_F)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_F");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_F");
    check_field_offset(lv, v3, 4, "C_BFu17ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_F, C_BFu17ll_F)
//============================================================================


struct  C_BFu17ll_I  {
  char v1;
  __tsu64 v2:17;
  int v3;
};
//SIG(1 C_BFu17ll_I) C1{ Fc FL:17 Fi}



static void Test_C_BFu17ll_I()
{
  {
    init_simple_test("C_BFu17ll_I");
    static STRUCT_IF_C C_BFu17ll_I lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_I)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_I");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_I");
    check_field_offset(lv, v3, 4, "C_BFu17ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_I, C_BFu17ll_I)
//============================================================================


struct  C_BFu17ll_Ip  {
  char v1;
  __tsu64 v2:17;
  int *v3;
};
//SIG(1 C_BFu17ll_Ip) C1{ Fc FL:17 Fp}



static void Test_C_BFu17ll_Ip()
{
  {
    init_simple_test("C_BFu17ll_Ip");
    static STRUCT_IF_C C_BFu17ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu17ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_Ip)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_Ip");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu17ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_Ip, C_BFu17ll_Ip)
//============================================================================


struct  C_BFu17ll_L  {
  char v1;
  __tsu64 v2:17;
  __tsi64 v3;
};
//SIG(1 C_BFu17ll_L) C1{ Fc FL:17 FL}



static void Test_C_BFu17ll_L()
{
  {
    init_simple_test("C_BFu17ll_L");
    static STRUCT_IF_C C_BFu17ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu17ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_L)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_L");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu17ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_L, C_BFu17ll_L)
//============================================================================


struct  C_BFu17ll_S  {
  char v1;
  __tsu64 v2:17;
  short v3;
};
//SIG(1 C_BFu17ll_S) C1{ Fc FL:17 Fs}



static void Test_C_BFu17ll_S()
{
  {
    init_simple_test("C_BFu17ll_S");
    static STRUCT_IF_C C_BFu17ll_S lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_S)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_S");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_S");
    check_field_offset(lv, v3, 4, "C_BFu17ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_S, C_BFu17ll_S)
//============================================================================


struct  C_BFu17ll_Uc  {
  char v1;
  __tsu64 v2:17;
  unsigned char v3;
};
//SIG(1 C_BFu17ll_Uc) C1{ Fc FL:17 Fc}



static void Test_C_BFu17ll_Uc()
{
  {
    init_simple_test("C_BFu17ll_Uc");
    static STRUCT_IF_C C_BFu17ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_Uc)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_Uc");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_Uc");
    check_field_offset(lv, v3, 4, "C_BFu17ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_Uc, C_BFu17ll_Uc)
//============================================================================


struct  C_BFu17ll_Ui  {
  char v1;
  __tsu64 v2:17;
  unsigned int v3;
};
//SIG(1 C_BFu17ll_Ui) C1{ Fc FL:17 Fi}



static void Test_C_BFu17ll_Ui()
{
  {
    init_simple_test("C_BFu17ll_Ui");
    static STRUCT_IF_C C_BFu17ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_Ui)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_Ui");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_Ui");
    check_field_offset(lv, v3, 4, "C_BFu17ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_Ui, C_BFu17ll_Ui)
//============================================================================


struct  C_BFu17ll_Ul  {
  char v1;
  __tsu64 v2:17;
  __tsu64 v3;
};
//SIG(1 C_BFu17ll_Ul) C1{ Fc FL:17 FL}



static void Test_C_BFu17ll_Ul()
{
  {
    init_simple_test("C_BFu17ll_Ul");
    static STRUCT_IF_C C_BFu17ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu17ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_Ul)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_Ul");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu17ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_Ul, C_BFu17ll_Ul)
//============================================================================


struct  C_BFu17ll_Us  {
  char v1;
  __tsu64 v2:17;
  unsigned short v3;
};
//SIG(1 C_BFu17ll_Us) C1{ Fc FL:17 Fs}



static void Test_C_BFu17ll_Us()
{
  {
    init_simple_test("C_BFu17ll_Us");
    static STRUCT_IF_C C_BFu17ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu17ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_Us)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_Us");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_Us");
    check_field_offset(lv, v3, 4, "C_BFu17ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_Us, C_BFu17ll_Us)
//============================================================================


struct  C_BFu17ll_Vp  {
  char v1;
  __tsu64 v2:17;
  void *v3;
};
//SIG(1 C_BFu17ll_Vp) C1{ Fc FL:17 Fp}



static void Test_C_BFu17ll_Vp()
{
  {
    init_simple_test("C_BFu17ll_Vp");
    static STRUCT_IF_C C_BFu17ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu17ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_Vp)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_Vp");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu17ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_Vp, C_BFu17ll_Vp)
//============================================================================


struct  C_BFu1c  {
  char v1;
  unsigned char v2:1;
};
//SIG(1 C_BFu1c) C1{ Fc Fc:1}



static void Test_C_BFu1c()
{
  {
    init_simple_test("C_BFu1c");
    static STRUCT_IF_C C_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(C_BFu1c)");
    check_field_offset(lv, v1, 0, "C_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c, C_BFu1c)
//============================================================================


struct  C_BFu1c_BFu15i  {
  char v1;
  unsigned char v2:1;
  unsigned int v3:15;
};
//SIG(1 C_BFu1c_BFu15i) C1{ Fc Fc:1 Fi:15}



static void Test_C_BFu1c_BFu15i()
{
  {
    init_simple_test("C_BFu1c_BFu15i");
    static STRUCT_IF_C C_BFu1c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1c_BFu15i)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "C_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "C_BFu1c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu15i, C_BFu1c_BFu15i)
//============================================================================


struct  C_BFu1c_BFu15ll  {
  char v1;
  unsigned char v2:1;
  __tsu64 v3:15;
};
//SIG(1 C_BFu1c_BFu15ll) C1{ Fc Fc:1 FL:15}



static void Test_C_BFu1c_BFu15ll()
{
  {
    init_simple_test("C_BFu1c_BFu15ll");
    static STRUCT_IF_C C_BFu1c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1c_BFu15ll)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "C_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "C_BFu1c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu15ll, C_BFu1c_BFu15ll)
//============================================================================


struct  C_BFu1c_BFu15s  {
  char v1;
  unsigned char v2:1;
  unsigned short v3:15;
};
//SIG(1 C_BFu1c_BFu15s) C1{ Fc Fc:1 Fs:15}



static void Test_C_BFu1c_BFu15s()
{
  {
    init_simple_test("C_BFu1c_BFu15s");
    static STRUCT_IF_C C_BFu1c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu1c_BFu15s)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "C_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "C_BFu1c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu15s, C_BFu1c_BFu15s)
//============================================================================


struct  C_BFu1c_BFu16i  {
  char v1;
  unsigned char v2:1;
  unsigned int v3:16;
};
//SIG(1 C_BFu1c_BFu16i) C1{ Fc Fc:1 Fi:16}



static void Test_C_BFu1c_BFu16i()
{
  {
    init_simple_test("C_BFu1c_BFu16i");
    static STRUCT_IF_C C_BFu1c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1c_BFu16i)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "C_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "C_BFu1c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu16i, C_BFu1c_BFu16i)
//============================================================================


struct  C_BFu1c_BFu16ll  {
  char v1;
  unsigned char v2:1;
  __tsu64 v3:16;
};
//SIG(1 C_BFu1c_BFu16ll) C1{ Fc Fc:1 FL:16}



static void Test_C_BFu1c_BFu16ll()
{
  {
    init_simple_test("C_BFu1c_BFu16ll");
    static STRUCT_IF_C C_BFu1c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1c_BFu16ll)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "C_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "C_BFu1c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu16ll, C_BFu1c_BFu16ll)
//============================================================================


struct  C_BFu1c_BFu16s  {
  char v1;
  unsigned char v2:1;
  unsigned short v3:16;
};
//SIG(1 C_BFu1c_BFu16s) C1{ Fc Fc:1 Fs:16}



static void Test_C_BFu1c_BFu16s()
{
  {
    init_simple_test("C_BFu1c_BFu16s");
    static STRUCT_IF_C C_BFu1c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu1c_BFu16s)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "C_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "C_BFu1c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu16s, C_BFu1c_BFu16s)
//============================================================================


struct  C_BFu1c_BFu17i  {
  char v1;
  unsigned char v2:1;
  unsigned int v3:17;
};
//SIG(1 C_BFu1c_BFu17i) C1{ Fc Fc:1 Fi:17}



static void Test_C_BFu1c_BFu17i()
{
  {
    init_simple_test("C_BFu1c_BFu17i");
    static STRUCT_IF_C C_BFu1c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1c_BFu17i)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "C_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "C_BFu1c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu17i, C_BFu1c_BFu17i)
//============================================================================


struct  C_BFu1c_BFu17ll  {
  char v1;
  unsigned char v2:1;
  __tsu64 v3:17;
};
//SIG(1 C_BFu1c_BFu17ll) C1{ Fc Fc:1 FL:17}



static void Test_C_BFu1c_BFu17ll()
{
  {
    init_simple_test("C_BFu1c_BFu17ll");
    static STRUCT_IF_C C_BFu1c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1c_BFu17ll)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "C_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "C_BFu1c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu17ll, C_BFu1c_BFu17ll)
//============================================================================


struct  C_BFu1c_BFu1c  {
  char v1;
  unsigned char v2:1;
  unsigned char v3:1;
};
//SIG(1 C_BFu1c_BFu1c) C1{ Fc Fc:1 Fc:1}



static void Test_C_BFu1c_BFu1c()
{
  {
    init_simple_test("C_BFu1c_BFu1c");
    static STRUCT_IF_C C_BFu1c_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu1c_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(C_BFu1c_BFu1c)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "C_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu1c, C_BFu1c_BFu1c)
//============================================================================


struct  C_BFu1c_BFu1i  {
  char v1;
  unsigned char v2:1;
  unsigned int v3:1;
};
//SIG(1 C_BFu1c_BFu1i) C1{ Fc Fc:1 Fi:1}



static void Test_C_BFu1c_BFu1i()
{
  {
    init_simple_test("C_BFu1c_BFu1i");
    static STRUCT_IF_C C_BFu1c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1c_BFu1i)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "C_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu1i, C_BFu1c_BFu1i)
//============================================================================


struct  C_BFu1c_BFu1ll  {
  char v1;
  unsigned char v2:1;
  __tsu64 v3:1;
};
//SIG(1 C_BFu1c_BFu1ll) C1{ Fc Fc:1 FL:1}



static void Test_C_BFu1c_BFu1ll()
{
  {
    init_simple_test("C_BFu1c_BFu1ll");
    static STRUCT_IF_C C_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1c_BFu1ll)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "C_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu1ll, C_BFu1c_BFu1ll)
//============================================================================


struct  C_BFu1c_BFu1s  {
  char v1;
  unsigned char v2:1;
  unsigned short v3:1;
};
//SIG(1 C_BFu1c_BFu1s) C1{ Fc Fc:1 Fs:1}



static void Test_C_BFu1c_BFu1s()
{
  {
    init_simple_test("C_BFu1c_BFu1s");
    static STRUCT_IF_C C_BFu1c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu1c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu1c_BFu1s)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "C_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu1s, C_BFu1c_BFu1s)
//============================================================================


struct  C_BFu1c_BFu31i  {
  char v1;
  unsigned char v2:1;
  unsigned int v3:31;
};
//SIG(1 C_BFu1c_BFu31i) C1{ Fc Fc:1 Fi:31}



static void Test_C_BFu1c_BFu31i()
{
  {
    init_simple_test("C_BFu1c_BFu31i");
    static STRUCT_IF_C C_BFu1c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1c_BFu31i)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "C_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "C_BFu1c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu31i, C_BFu1c_BFu31i)
//============================================================================


struct  C_BFu1c_BFu31ll  {
  char v1;
  unsigned char v2:1;
  __tsu64 v3:31;
};
//SIG(1 C_BFu1c_BFu31ll) C1{ Fc Fc:1 FL:31}



static void Test_C_BFu1c_BFu31ll()
{
  {
    init_simple_test("C_BFu1c_BFu31ll");
    static STRUCT_IF_C C_BFu1c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1c_BFu31ll)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, 1, "C_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, hide_ull(1LL<<30), "C_BFu1c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu31ll, C_BFu1c_BFu31ll)
//============================================================================


struct  C_BFu1c_BFu32i  {
  char v1;
  unsigned char v2:1;
  unsigned int v3:32;
};
//SIG(1 C_BFu1c_BFu32i) C1{ Fc Fc:1 Fi:32}



static void Test_C_BFu1c_BFu32i()
{
  {
    init_simple_test("C_BFu1c_BFu32i");
    static STRUCT_IF_C C_BFu1c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1c_BFu32i)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "C_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "C_BFu1c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu32i, C_BFu1c_BFu32i)
//============================================================================


struct  C_BFu1c_BFu32ll  {
  char v1;
  unsigned char v2:1;
  __tsu64 v3:32;
};
//SIG(1 C_BFu1c_BFu32ll) C1{ Fc Fc:1 FL:32}



static void Test_C_BFu1c_BFu32ll()
{
  {
    init_simple_test("C_BFu1c_BFu32ll");
    static STRUCT_IF_C C_BFu1c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1c_BFu32ll)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, 1, "C_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, hide_ull(1LL<<31), "C_BFu1c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu32ll, C_BFu1c_BFu32ll)
//============================================================================


struct  C_BFu1c_BFu33  {
  char v1;
  unsigned char v2:1;
  __tsu64 v3:33;
};
//SIG(1 C_BFu1c_BFu33) C1{ Fc Fc:1 FL:33}



static void Test_C_BFu1c_BFu33()
{
  {
    init_simple_test("C_BFu1c_BFu33");
    static STRUCT_IF_C C_BFu1c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1c_BFu33)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, 1, "C_BFu1c_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, hide_ull(1LL<<32), "C_BFu1c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu33, C_BFu1c_BFu33)
//============================================================================


struct  C_BFu1c_BFu7c  {
  char v1;
  unsigned char v2:1;
  unsigned char v3:7;
};
//SIG(1 C_BFu1c_BFu7c) C1{ Fc Fc:1 Fc:7}



static void Test_C_BFu1c_BFu7c()
{
  {
    init_simple_test("C_BFu1c_BFu7c");
    static STRUCT_IF_C C_BFu1c_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu1c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(C_BFu1c_BFu7c)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "C_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "C_BFu1c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu7c, C_BFu1c_BFu7c)
//============================================================================


struct  C_BFu1c_BFu7i  {
  char v1;
  unsigned char v2:1;
  unsigned int v3:7;
};
//SIG(1 C_BFu1c_BFu7i) C1{ Fc Fc:1 Fi:7}



static void Test_C_BFu1c_BFu7i()
{
  {
    init_simple_test("C_BFu1c_BFu7i");
    static STRUCT_IF_C C_BFu1c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1c_BFu7i)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "C_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "C_BFu1c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu7i, C_BFu1c_BFu7i)
//============================================================================


struct  C_BFu1c_BFu7ll  {
  char v1;
  unsigned char v2:1;
  __tsu64 v3:7;
};
//SIG(1 C_BFu1c_BFu7ll) C1{ Fc Fc:1 FL:7}



static void Test_C_BFu1c_BFu7ll()
{
  {
    init_simple_test("C_BFu1c_BFu7ll");
    static STRUCT_IF_C C_BFu1c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1c_BFu7ll)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "C_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "C_BFu1c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu7ll, C_BFu1c_BFu7ll)
//============================================================================


struct  C_BFu1c_BFu7s  {
  char v1;
  unsigned char v2:1;
  unsigned short v3:7;
};
//SIG(1 C_BFu1c_BFu7s) C1{ Fc Fc:1 Fs:7}



static void Test_C_BFu1c_BFu7s()
{
  {
    init_simple_test("C_BFu1c_BFu7s");
    static STRUCT_IF_C C_BFu1c_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu1c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu1c_BFu7s)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "C_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "C_BFu1c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu7s, C_BFu1c_BFu7s)
//============================================================================


struct  C_BFu1c_BFu8c  {
  char v1;
  unsigned char v2:1;
  unsigned char v3:8;
};
//SIG(1 C_BFu1c_BFu8c) C1{ Fc Fc:1 Fc:8}



static void Test_C_BFu1c_BFu8c()
{
  {
    init_simple_test("C_BFu1c_BFu8c");
    static STRUCT_IF_C C_BFu1c_BFu8c lv;
    check2(sizeof(lv), 3, "sizeof(C_BFu1c_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(C_BFu1c_BFu8c)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "C_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "C_BFu1c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu8c, C_BFu1c_BFu8c)
//============================================================================


struct  C_BFu1c_BFu8i  {
  char v1;
  unsigned char v2:1;
  unsigned int v3:8;
};
//SIG(1 C_BFu1c_BFu8i) C1{ Fc Fc:1 Fi:8}



static void Test_C_BFu1c_BFu8i()
{
  {
    init_simple_test("C_BFu1c_BFu8i");
    static STRUCT_IF_C C_BFu1c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1c_BFu8i)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "C_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "C_BFu1c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu8i, C_BFu1c_BFu8i)
//============================================================================


struct  C_BFu1c_BFu8ll  {
  char v1;
  unsigned char v2:1;
  __tsu64 v3:8;
};
//SIG(1 C_BFu1c_BFu8ll) C1{ Fc Fc:1 FL:8}



static void Test_C_BFu1c_BFu8ll()
{
  {
    init_simple_test("C_BFu1c_BFu8ll");
    static STRUCT_IF_C C_BFu1c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1c_BFu8ll)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "C_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "C_BFu1c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu8ll, C_BFu1c_BFu8ll)
//============================================================================


struct  C_BFu1c_BFu8s  {
  char v1;
  unsigned char v2:1;
  unsigned short v3:8;
};
//SIG(1 C_BFu1c_BFu8s) C1{ Fc Fc:1 Fs:8}



static void Test_C_BFu1c_BFu8s()
{
  {
    init_simple_test("C_BFu1c_BFu8s");
    static STRUCT_IF_C C_BFu1c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu1c_BFu8s)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "C_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "C_BFu1c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu8s, C_BFu1c_BFu8s)
//============================================================================


struct  C_BFu1c_BFu9i  {
  char v1;
  unsigned char v2:1;
  unsigned int v3:9;
};
//SIG(1 C_BFu1c_BFu9i) C1{ Fc Fc:1 Fi:9}



static void Test_C_BFu1c_BFu9i()
{
  {
    init_simple_test("C_BFu1c_BFu9i");
    static STRUCT_IF_C C_BFu1c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1c_BFu9i)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "C_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "C_BFu1c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu9i, C_BFu1c_BFu9i)
//============================================================================


struct  C_BFu1c_BFu9ll  {
  char v1;
  unsigned char v2:1;
  __tsu64 v3:9;
};
//SIG(1 C_BFu1c_BFu9ll) C1{ Fc Fc:1 FL:9}



static void Test_C_BFu1c_BFu9ll()
{
  {
    init_simple_test("C_BFu1c_BFu9ll");
    static STRUCT_IF_C C_BFu1c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1c_BFu9ll)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "C_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "C_BFu1c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu9ll, C_BFu1c_BFu9ll)
//============================================================================


struct  C_BFu1c_BFu9s  {
  char v1;
  unsigned char v2:1;
  unsigned short v3:9;
};
//SIG(1 C_BFu1c_BFu9s) C1{ Fc Fc:1 Fs:9}



static void Test_C_BFu1c_BFu9s()
{
  {
    init_simple_test("C_BFu1c_BFu9s");
    static STRUCT_IF_C C_BFu1c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu1c_BFu9s)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "C_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "C_BFu1c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu9s, C_BFu1c_BFu9s)
//============================================================================


struct  C_BFu1c_C  {
  char v1;
  unsigned char v2:1;
  char v3;
};
//SIG(1 C_BFu1c_C) C1{ Fc Fc:1 Fc}



static void Test_C_BFu1c_C()
{
  {
    init_simple_test("C_BFu1c_C");
    static STRUCT_IF_C C_BFu1c_C lv;
    check2(sizeof(lv), 3, "sizeof(C_BFu1c_C)");
    check2(__alignof__(lv), 1, "__alignof__(C_BFu1c_C)");
    check_field_offset(lv, v1, 0, "C_BFu1c_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_C");
    check_field_offset(lv, v3, 2, "C_BFu1c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_C, C_BFu1c_C)
//============================================================================


struct  C_BFu1c_D  {
  char v1;
  unsigned char v2:1;
  double v3;
};
//SIG(1 C_BFu1c_D) C1{ Fc Fc:1 FL}



static void Test_C_BFu1c_D()
{
  {
    init_simple_test("C_BFu1c_D");
    static STRUCT_IF_C C_BFu1c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu1c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1c_D)");
    check_field_offset(lv, v1, 0, "C_BFu1c_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu1c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_D, C_BFu1c_D)
//============================================================================


struct  C_BFu1c_F  {
  char v1;
  unsigned char v2:1;
  float v3;
};
//SIG(1 C_BFu1c_F) C1{ Fc Fc:1 Fi}



static void Test_C_BFu1c_F()
{
  {
    init_simple_test("C_BFu1c_F");
    static STRUCT_IF_C C_BFu1c_F lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1c_F)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1c_F)");
    check_field_offset(lv, v1, 0, "C_BFu1c_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_F");
    check_field_offset(lv, v3, 4, "C_BFu1c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_F, C_BFu1c_F)
//============================================================================


struct  C_BFu1c_I  {
  char v1;
  unsigned char v2:1;
  int v3;
};
//SIG(1 C_BFu1c_I) C1{ Fc Fc:1 Fi}



static void Test_C_BFu1c_I()
{
  {
    init_simple_test("C_BFu1c_I");
    static STRUCT_IF_C C_BFu1c_I lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1c_I)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1c_I)");
    check_field_offset(lv, v1, 0, "C_BFu1c_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_I");
    check_field_offset(lv, v3, 4, "C_BFu1c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_I, C_BFu1c_I)
//============================================================================


struct  C_BFu1c_Ip  {
  char v1;
  unsigned char v2:1;
  int *v3;
};
//SIG(1 C_BFu1c_Ip) C1{ Fc Fc:1 Fp}



static void Test_C_BFu1c_Ip()
{
  {
    init_simple_test("C_BFu1c_Ip");
    static STRUCT_IF_C C_BFu1c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu1c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1c_Ip)");
    check_field_offset(lv, v1, 0, "C_BFu1c_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu1c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_Ip, C_BFu1c_Ip)
//============================================================================


struct  C_BFu1c_L  {
  char v1;
  unsigned char v2:1;
  __tsi64 v3;
};
//SIG(1 C_BFu1c_L) C1{ Fc Fc:1 FL}



static void Test_C_BFu1c_L()
{
  {
    init_simple_test("C_BFu1c_L");
    static STRUCT_IF_C C_BFu1c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu1c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1c_L)");
    check_field_offset(lv, v1, 0, "C_BFu1c_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu1c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_L, C_BFu1c_L)
//============================================================================


struct  C_BFu1c_S  {
  char v1;
  unsigned char v2:1;
  short v3;
};
//SIG(1 C_BFu1c_S) C1{ Fc Fc:1 Fs}



static void Test_C_BFu1c_S()
{
  {
    init_simple_test("C_BFu1c_S");
    static STRUCT_IF_C C_BFu1c_S lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1c_S)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu1c_S)");
    check_field_offset(lv, v1, 0, "C_BFu1c_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_S");
    check_field_offset(lv, v3, 2, "C_BFu1c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_S, C_BFu1c_S)
//============================================================================


struct  C_BFu1c_Uc  {
  char v1;
  unsigned char v2:1;
  unsigned char v3;
};
//SIG(1 C_BFu1c_Uc) C1{ Fc Fc:1 Fc}



static void Test_C_BFu1c_Uc()
{
  {
    init_simple_test("C_BFu1c_Uc");
    static STRUCT_IF_C C_BFu1c_Uc lv;
    check2(sizeof(lv), 3, "sizeof(C_BFu1c_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(C_BFu1c_Uc)");
    check_field_offset(lv, v1, 0, "C_BFu1c_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_Uc");
    check_field_offset(lv, v3, 2, "C_BFu1c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_Uc, C_BFu1c_Uc)
//============================================================================


struct  C_BFu1c_Ui  {
  char v1;
  unsigned char v2:1;
  unsigned int v3;
};
//SIG(1 C_BFu1c_Ui) C1{ Fc Fc:1 Fi}



static void Test_C_BFu1c_Ui()
{
  {
    init_simple_test("C_BFu1c_Ui");
    static STRUCT_IF_C C_BFu1c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1c_Ui)");
    check_field_offset(lv, v1, 0, "C_BFu1c_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_Ui");
    check_field_offset(lv, v3, 4, "C_BFu1c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_Ui, C_BFu1c_Ui)
//============================================================================


struct  C_BFu1c_Ul  {
  char v1;
  unsigned char v2:1;
  __tsu64 v3;
};
//SIG(1 C_BFu1c_Ul) C1{ Fc Fc:1 FL}



static void Test_C_BFu1c_Ul()
{
  {
    init_simple_test("C_BFu1c_Ul");
    static STRUCT_IF_C C_BFu1c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu1c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1c_Ul)");
    check_field_offset(lv, v1, 0, "C_BFu1c_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu1c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_Ul, C_BFu1c_Ul)
//============================================================================


struct  C_BFu1c_Us  {
  char v1;
  unsigned char v2:1;
  unsigned short v3;
};
//SIG(1 C_BFu1c_Us) C1{ Fc Fc:1 Fs}



static void Test_C_BFu1c_Us()
{
  {
    init_simple_test("C_BFu1c_Us");
    static STRUCT_IF_C C_BFu1c_Us lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu1c_Us)");
    check_field_offset(lv, v1, 0, "C_BFu1c_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_Us");
    check_field_offset(lv, v3, 2, "C_BFu1c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_Us, C_BFu1c_Us)
//============================================================================


struct  C_BFu1c_Vp  {
  char v1;
  unsigned char v2:1;
  void *v3;
};
//SIG(1 C_BFu1c_Vp) C1{ Fc Fc:1 Fp}



static void Test_C_BFu1c_Vp()
{
  {
    init_simple_test("C_BFu1c_Vp");
    static STRUCT_IF_C C_BFu1c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu1c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1c_Vp)");
    check_field_offset(lv, v1, 0, "C_BFu1c_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu1c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_Vp, C_BFu1c_Vp)
//============================================================================


struct  C_BFu1i  {
  char v1;
  unsigned int v2:1;
};
//SIG(1 C_BFu1i) C1{ Fc Fi:1}



static void Test_C_BFu1i()
{
  {
    init_simple_test("C_BFu1i");
    static STRUCT_IF_C C_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i)");
    check_field_offset(lv, v1, 0, "C_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i, C_BFu1i)
//============================================================================


struct  C_BFu1i_BFu15i  {
  char v1;
  unsigned int v2:1;
  unsigned int v3:15;
};
//SIG(1 C_BFu1i_BFu15i) C1{ Fc Fi:1 Fi:15}



static void Test_C_BFu1i_BFu15i()
{
  {
    init_simple_test("C_BFu1i_BFu15i");
    static STRUCT_IF_C C_BFu1i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i_BFu15i)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "C_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "C_BFu1i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu15i, C_BFu1i_BFu15i)
//============================================================================


struct  C_BFu1i_BFu15ll  {
  char v1;
  unsigned int v2:1;
  __tsu64 v3:15;
};
//SIG(1 C_BFu1i_BFu15ll) C1{ Fc Fi:1 FL:15}



static void Test_C_BFu1i_BFu15ll()
{
  {
    init_simple_test("C_BFu1i_BFu15ll");
    static STRUCT_IF_C C_BFu1i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1i_BFu15ll)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "C_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "C_BFu1i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu15ll, C_BFu1i_BFu15ll)
//============================================================================


struct  C_BFu1i_BFu15s  {
  char v1;
  unsigned int v2:1;
  unsigned short v3:15;
};
//SIG(1 C_BFu1i_BFu15s) C1{ Fc Fi:1 Fs:15}



static void Test_C_BFu1i_BFu15s()
{
  {
    init_simple_test("C_BFu1i_BFu15s");
    static STRUCT_IF_C C_BFu1i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i_BFu15s)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "C_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "C_BFu1i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu15s, C_BFu1i_BFu15s)
//============================================================================


struct  C_BFu1i_BFu16i  {
  char v1;
  unsigned int v2:1;
  unsigned int v3:16;
};
//SIG(1 C_BFu1i_BFu16i) C1{ Fc Fi:1 Fi:16}



static void Test_C_BFu1i_BFu16i()
{
  {
    init_simple_test("C_BFu1i_BFu16i");
    static STRUCT_IF_C C_BFu1i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i_BFu16i)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "C_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "C_BFu1i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu16i, C_BFu1i_BFu16i)
//============================================================================


struct  C_BFu1i_BFu16ll  {
  char v1;
  unsigned int v2:1;
  __tsu64 v3:16;
};
//SIG(1 C_BFu1i_BFu16ll) C1{ Fc Fi:1 FL:16}



static void Test_C_BFu1i_BFu16ll()
{
  {
    init_simple_test("C_BFu1i_BFu16ll");
    static STRUCT_IF_C C_BFu1i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1i_BFu16ll)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "C_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "C_BFu1i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu16ll, C_BFu1i_BFu16ll)
//============================================================================


struct  C_BFu1i_BFu16s  {
  char v1;
  unsigned int v2:1;
  unsigned short v3:16;
};
//SIG(1 C_BFu1i_BFu16s) C1{ Fc Fi:1 Fs:16}



static void Test_C_BFu1i_BFu16s()
{
  {
    init_simple_test("C_BFu1i_BFu16s");
    static STRUCT_IF_C C_BFu1i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i_BFu16s)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "C_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "C_BFu1i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu16s, C_BFu1i_BFu16s)
//============================================================================


struct  C_BFu1i_BFu17i  {
  char v1;
  unsigned int v2:1;
  unsigned int v3:17;
};
//SIG(1 C_BFu1i_BFu17i) C1{ Fc Fi:1 Fi:17}



static void Test_C_BFu1i_BFu17i()
{
  {
    init_simple_test("C_BFu1i_BFu17i");
    static STRUCT_IF_C C_BFu1i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i_BFu17i)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "C_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "C_BFu1i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu17i, C_BFu1i_BFu17i)
//============================================================================


struct  C_BFu1i_BFu17ll  {
  char v1;
  unsigned int v2:1;
  __tsu64 v3:17;
};
//SIG(1 C_BFu1i_BFu17ll) C1{ Fc Fi:1 FL:17}



static void Test_C_BFu1i_BFu17ll()
{
  {
    init_simple_test("C_BFu1i_BFu17ll");
    static STRUCT_IF_C C_BFu1i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1i_BFu17ll)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "C_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "C_BFu1i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu17ll, C_BFu1i_BFu17ll)
//============================================================================


struct  C_BFu1i_BFu1c  {
  char v1;
  unsigned int v2:1;
  unsigned char v3:1;
};
//SIG(1 C_BFu1i_BFu1c) C1{ Fc Fi:1 Fc:1}



static void Test_C_BFu1i_BFu1c()
{
  {
    init_simple_test("C_BFu1i_BFu1c");
    static STRUCT_IF_C C_BFu1i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i_BFu1c)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "C_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu1c, C_BFu1i_BFu1c)
//============================================================================


struct  C_BFu1i_BFu1i  {
  char v1;
  unsigned int v2:1;
  unsigned int v3:1;
};
//SIG(1 C_BFu1i_BFu1i) C1{ Fc Fi:1 Fi:1}



static void Test_C_BFu1i_BFu1i()
{
  {
    init_simple_test("C_BFu1i_BFu1i");
    static STRUCT_IF_C C_BFu1i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i_BFu1i)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "C_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu1i, C_BFu1i_BFu1i)
//============================================================================


struct  C_BFu1i_BFu1ll  {
  char v1;
  unsigned int v2:1;
  __tsu64 v3:1;
};
//SIG(1 C_BFu1i_BFu1ll) C1{ Fc Fi:1 FL:1}



static void Test_C_BFu1i_BFu1ll()
{
  {
    init_simple_test("C_BFu1i_BFu1ll");
    static STRUCT_IF_C C_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1i_BFu1ll)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "C_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu1ll, C_BFu1i_BFu1ll)
//============================================================================


struct  C_BFu1i_BFu1s  {
  char v1;
  unsigned int v2:1;
  unsigned short v3:1;
};
//SIG(1 C_BFu1i_BFu1s) C1{ Fc Fi:1 Fs:1}



static void Test_C_BFu1i_BFu1s()
{
  {
    init_simple_test("C_BFu1i_BFu1s");
    static STRUCT_IF_C C_BFu1i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i_BFu1s)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "C_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu1s, C_BFu1i_BFu1s)
//============================================================================


struct  C_BFu1i_BFu31i  {
  char v1;
  unsigned int v2:1;
  unsigned int v3:31;
};
//SIG(1 C_BFu1i_BFu31i) C1{ Fc Fi:1 Fi:31}



static void Test_C_BFu1i_BFu31i()
{
  {
    init_simple_test("C_BFu1i_BFu31i");
    static STRUCT_IF_C C_BFu1i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i_BFu31i)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "C_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "C_BFu1i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu31i, C_BFu1i_BFu31i)
//============================================================================


struct  C_BFu1i_BFu31ll  {
  char v1;
  unsigned int v2:1;
  __tsu64 v3:31;
};
//SIG(1 C_BFu1i_BFu31ll) C1{ Fc Fi:1 FL:31}



static void Test_C_BFu1i_BFu31ll()
{
  {
    init_simple_test("C_BFu1i_BFu31ll");
    static STRUCT_IF_C C_BFu1i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1i_BFu31ll)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, 1, "C_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, hide_ull(1LL<<30), "C_BFu1i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu31ll, C_BFu1i_BFu31ll)
//============================================================================


struct  C_BFu1i_BFu32i  {
  char v1;
  unsigned int v2:1;
  unsigned int v3:32;
};
//SIG(1 C_BFu1i_BFu32i) C1{ Fc Fi:1 Fi:32}



static void Test_C_BFu1i_BFu32i()
{
  {
    init_simple_test("C_BFu1i_BFu32i");
    static STRUCT_IF_C C_BFu1i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i_BFu32i)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "C_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "C_BFu1i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu32i, C_BFu1i_BFu32i)
//============================================================================


struct  C_BFu1i_BFu32ll  {
  char v1;
  unsigned int v2:1;
  __tsu64 v3:32;
};
//SIG(1 C_BFu1i_BFu32ll) C1{ Fc Fi:1 FL:32}



static void Test_C_BFu1i_BFu32ll()
{
  {
    init_simple_test("C_BFu1i_BFu32ll");
    static STRUCT_IF_C C_BFu1i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1i_BFu32ll)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, 1, "C_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, hide_ull(1LL<<31), "C_BFu1i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu32ll, C_BFu1i_BFu32ll)
//============================================================================


struct  C_BFu1i_BFu33  {
  char v1;
  unsigned int v2:1;
  __tsu64 v3:33;
};
//SIG(1 C_BFu1i_BFu33) C1{ Fc Fi:1 FL:33}



static void Test_C_BFu1i_BFu33()
{
  {
    init_simple_test("C_BFu1i_BFu33");
    static STRUCT_IF_C C_BFu1i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1i_BFu33)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, 1, "C_BFu1i_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, hide_ull(1LL<<32), "C_BFu1i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu33, C_BFu1i_BFu33)
//============================================================================


struct  C_BFu1i_BFu7c  {
  char v1;
  unsigned int v2:1;
  unsigned char v3:7;
};
//SIG(1 C_BFu1i_BFu7c) C1{ Fc Fi:1 Fc:7}



static void Test_C_BFu1i_BFu7c()
{
  {
    init_simple_test("C_BFu1i_BFu7c");
    static STRUCT_IF_C C_BFu1i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i_BFu7c)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "C_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "C_BFu1i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu7c, C_BFu1i_BFu7c)
//============================================================================


struct  C_BFu1i_BFu7i  {
  char v1;
  unsigned int v2:1;
  unsigned int v3:7;
};
//SIG(1 C_BFu1i_BFu7i) C1{ Fc Fi:1 Fi:7}



static void Test_C_BFu1i_BFu7i()
{
  {
    init_simple_test("C_BFu1i_BFu7i");
    static STRUCT_IF_C C_BFu1i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i_BFu7i)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "C_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "C_BFu1i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu7i, C_BFu1i_BFu7i)
//============================================================================


struct  C_BFu1i_BFu7ll  {
  char v1;
  unsigned int v2:1;
  __tsu64 v3:7;
};
//SIG(1 C_BFu1i_BFu7ll) C1{ Fc Fi:1 FL:7}



static void Test_C_BFu1i_BFu7ll()
{
  {
    init_simple_test("C_BFu1i_BFu7ll");
    static STRUCT_IF_C C_BFu1i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1i_BFu7ll)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "C_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "C_BFu1i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu7ll, C_BFu1i_BFu7ll)
//============================================================================


struct  C_BFu1i_BFu7s  {
  char v1;
  unsigned int v2:1;
  unsigned short v3:7;
};
//SIG(1 C_BFu1i_BFu7s) C1{ Fc Fi:1 Fs:7}



static void Test_C_BFu1i_BFu7s()
{
  {
    init_simple_test("C_BFu1i_BFu7s");
    static STRUCT_IF_C C_BFu1i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i_BFu7s)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "C_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "C_BFu1i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu7s, C_BFu1i_BFu7s)
//============================================================================


struct  C_BFu1i_BFu8c  {
  char v1;
  unsigned int v2:1;
  unsigned char v3:8;
};
//SIG(1 C_BFu1i_BFu8c) C1{ Fc Fi:1 Fc:8}



static void Test_C_BFu1i_BFu8c()
{
  {
    init_simple_test("C_BFu1i_BFu8c");
    static STRUCT_IF_C C_BFu1i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i_BFu8c)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "C_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "C_BFu1i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu8c, C_BFu1i_BFu8c)
//============================================================================


struct  C_BFu1i_BFu8i  {
  char v1;
  unsigned int v2:1;
  unsigned int v3:8;
};
//SIG(1 C_BFu1i_BFu8i) C1{ Fc Fi:1 Fi:8}



static void Test_C_BFu1i_BFu8i()
{
  {
    init_simple_test("C_BFu1i_BFu8i");
    static STRUCT_IF_C C_BFu1i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i_BFu8i)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "C_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "C_BFu1i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu8i, C_BFu1i_BFu8i)
//============================================================================


struct  C_BFu1i_BFu8ll  {
  char v1;
  unsigned int v2:1;
  __tsu64 v3:8;
};
//SIG(1 C_BFu1i_BFu8ll) C1{ Fc Fi:1 FL:8}



static void Test_C_BFu1i_BFu8ll()
{
  {
    init_simple_test("C_BFu1i_BFu8ll");
    static STRUCT_IF_C C_BFu1i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1i_BFu8ll)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "C_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "C_BFu1i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu8ll, C_BFu1i_BFu8ll)
//============================================================================


struct  C_BFu1i_BFu8s  {
  char v1;
  unsigned int v2:1;
  unsigned short v3:8;
};
//SIG(1 C_BFu1i_BFu8s) C1{ Fc Fi:1 Fs:8}



static void Test_C_BFu1i_BFu8s()
{
  {
    init_simple_test("C_BFu1i_BFu8s");
    static STRUCT_IF_C C_BFu1i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i_BFu8s)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "C_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "C_BFu1i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu8s, C_BFu1i_BFu8s)
//============================================================================


struct  C_BFu1i_BFu9i  {
  char v1;
  unsigned int v2:1;
  unsigned int v3:9;
};
//SIG(1 C_BFu1i_BFu9i) C1{ Fc Fi:1 Fi:9}



static void Test_C_BFu1i_BFu9i()
{
  {
    init_simple_test("C_BFu1i_BFu9i");
    static STRUCT_IF_C C_BFu1i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i_BFu9i)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "C_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "C_BFu1i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu9i, C_BFu1i_BFu9i)
//============================================================================


struct  C_BFu1i_BFu9ll  {
  char v1;
  unsigned int v2:1;
  __tsu64 v3:9;
};
//SIG(1 C_BFu1i_BFu9ll) C1{ Fc Fi:1 FL:9}



static void Test_C_BFu1i_BFu9ll()
{
  {
    init_simple_test("C_BFu1i_BFu9ll");
    static STRUCT_IF_C C_BFu1i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1i_BFu9ll)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "C_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "C_BFu1i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu9ll, C_BFu1i_BFu9ll)
//============================================================================


struct  C_BFu1i_BFu9s  {
  char v1;
  unsigned int v2:1;
  unsigned short v3:9;
};
//SIG(1 C_BFu1i_BFu9s) C1{ Fc Fi:1 Fs:9}



static void Test_C_BFu1i_BFu9s()
{
  {
    init_simple_test("C_BFu1i_BFu9s");
    static STRUCT_IF_C C_BFu1i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i_BFu9s)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "C_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "C_BFu1i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu9s, C_BFu1i_BFu9s)
//============================================================================


struct  C_BFu1i_C  {
  char v1;
  unsigned int v2:1;
  char v3;
};
//SIG(1 C_BFu1i_C) C1{ Fc Fi:1 Fc}



static void Test_C_BFu1i_C()
{
  {
    init_simple_test("C_BFu1i_C");
    static STRUCT_IF_C C_BFu1i_C lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1i_C)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i_C)");
    check_field_offset(lv, v1, 0, "C_BFu1i_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_C");
    check_field_offset(lv, v3, 2, "C_BFu1i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_C, C_BFu1i_C)
//============================================================================


struct  C_BFu1i_D  {
  char v1;
  unsigned int v2:1;
  double v3;
};
//SIG(1 C_BFu1i_D) C1{ Fc Fi:1 FL}



static void Test_C_BFu1i_D()
{
  {
    init_simple_test("C_BFu1i_D");
    static STRUCT_IF_C C_BFu1i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu1i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1i_D)");
    check_field_offset(lv, v1, 0, "C_BFu1i_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu1i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_D, C_BFu1i_D)
//============================================================================


struct  C_BFu1i_F  {
  char v1;
  unsigned int v2:1;
  float v3;
};
//SIG(1 C_BFu1i_F) C1{ Fc Fi:1 Fi}



static void Test_C_BFu1i_F()
{
  {
    init_simple_test("C_BFu1i_F");
    static STRUCT_IF_C C_BFu1i_F lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1i_F)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i_F)");
    check_field_offset(lv, v1, 0, "C_BFu1i_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_F");
    check_field_offset(lv, v3, 4, "C_BFu1i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_F, C_BFu1i_F)
//============================================================================


struct  C_BFu1i_I  {
  char v1;
  unsigned int v2:1;
  int v3;
};
//SIG(1 C_BFu1i_I) C1{ Fc Fi:1 Fi}



static void Test_C_BFu1i_I()
{
  {
    init_simple_test("C_BFu1i_I");
    static STRUCT_IF_C C_BFu1i_I lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1i_I)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i_I)");
    check_field_offset(lv, v1, 0, "C_BFu1i_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_I");
    check_field_offset(lv, v3, 4, "C_BFu1i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_I, C_BFu1i_I)
//============================================================================


struct  C_BFu1i_Ip  {
  char v1;
  unsigned int v2:1;
  int *v3;
};
//SIG(1 C_BFu1i_Ip) C1{ Fc Fi:1 Fp}



static void Test_C_BFu1i_Ip()
{
  {
    init_simple_test("C_BFu1i_Ip");
    static STRUCT_IF_C C_BFu1i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu1i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1i_Ip)");
    check_field_offset(lv, v1, 0, "C_BFu1i_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu1i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_Ip, C_BFu1i_Ip)
//============================================================================


struct  C_BFu1i_L  {
  char v1;
  unsigned int v2:1;
  __tsi64 v3;
};
//SIG(1 C_BFu1i_L) C1{ Fc Fi:1 FL}



static void Test_C_BFu1i_L()
{
  {
    init_simple_test("C_BFu1i_L");
    static STRUCT_IF_C C_BFu1i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu1i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1i_L)");
    check_field_offset(lv, v1, 0, "C_BFu1i_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu1i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_L, C_BFu1i_L)
//============================================================================


struct  C_BFu1i_S  {
  char v1;
  unsigned int v2:1;
  short v3;
};
//SIG(1 C_BFu1i_S) C1{ Fc Fi:1 Fs}



static void Test_C_BFu1i_S()
{
  {
    init_simple_test("C_BFu1i_S");
    static STRUCT_IF_C C_BFu1i_S lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1i_S)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i_S)");
    check_field_offset(lv, v1, 0, "C_BFu1i_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_S");
    check_field_offset(lv, v3, 2, "C_BFu1i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_S, C_BFu1i_S)
//============================================================================


struct  C_BFu1i_Uc  {
  char v1;
  unsigned int v2:1;
  unsigned char v3;
};
//SIG(1 C_BFu1i_Uc) C1{ Fc Fi:1 Fc}



static void Test_C_BFu1i_Uc()
{
  {
    init_simple_test("C_BFu1i_Uc");
    static STRUCT_IF_C C_BFu1i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i_Uc)");
    check_field_offset(lv, v1, 0, "C_BFu1i_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_Uc");
    check_field_offset(lv, v3, 2, "C_BFu1i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_Uc, C_BFu1i_Uc)
//============================================================================


struct  C_BFu1i_Ui  {
  char v1;
  unsigned int v2:1;
  unsigned int v3;
};
//SIG(1 C_BFu1i_Ui) C1{ Fc Fi:1 Fi}



static void Test_C_BFu1i_Ui()
{
  {
    init_simple_test("C_BFu1i_Ui");
    static STRUCT_IF_C C_BFu1i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i_Ui)");
    check_field_offset(lv, v1, 0, "C_BFu1i_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_Ui");
    check_field_offset(lv, v3, 4, "C_BFu1i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_Ui, C_BFu1i_Ui)
//============================================================================


struct  C_BFu1i_Ul  {
  char v1;
  unsigned int v2:1;
  __tsu64 v3;
};
//SIG(1 C_BFu1i_Ul) C1{ Fc Fi:1 FL}



static void Test_C_BFu1i_Ul()
{
  {
    init_simple_test("C_BFu1i_Ul");
    static STRUCT_IF_C C_BFu1i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu1i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1i_Ul)");
    check_field_offset(lv, v1, 0, "C_BFu1i_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu1i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_Ul, C_BFu1i_Ul)
//============================================================================


struct  C_BFu1i_Us  {
  char v1;
  unsigned int v2:1;
  unsigned short v3;
};
//SIG(1 C_BFu1i_Us) C1{ Fc Fi:1 Fs}



static void Test_C_BFu1i_Us()
{
  {
    init_simple_test("C_BFu1i_Us");
    static STRUCT_IF_C C_BFu1i_Us lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i_Us)");
    check_field_offset(lv, v1, 0, "C_BFu1i_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_Us");
    check_field_offset(lv, v3, 2, "C_BFu1i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_Us, C_BFu1i_Us)
//============================================================================


struct  C_BFu1i_Vp  {
  char v1;
  unsigned int v2:1;
  void *v3;
};
//SIG(1 C_BFu1i_Vp) C1{ Fc Fi:1 Fp}



static void Test_C_BFu1i_Vp()
{
  {
    init_simple_test("C_BFu1i_Vp");
    static STRUCT_IF_C C_BFu1i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu1i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1i_Vp)");
    check_field_offset(lv, v1, 0, "C_BFu1i_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu1i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_Vp, C_BFu1i_Vp)
//============================================================================


struct  C_BFu1ll  {
  char v1;
  __tsu64 v2:1;
};
//SIG(1 C_BFu1ll) C1{ Fc FL:1}



static void Test_C_BFu1ll()
{
  {
    init_simple_test("C_BFu1ll");
    static STRUCT_IF_C C_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll)");
    check_field_offset(lv, v1, 0, "C_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll, C_BFu1ll)
//============================================================================


struct  C_BFu1ll_BFu15i  {
  char v1;
  __tsu64 v2:1;
  unsigned int v3:15;
};
//SIG(1 C_BFu1ll_BFu15i) C1{ Fc FL:1 Fi:15}



static void Test_C_BFu1ll_BFu15i()
{
  {
    init_simple_test("C_BFu1ll_BFu15i");
    static STRUCT_IF_C C_BFu1ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu15i)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "C_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "C_BFu1ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu15i, C_BFu1ll_BFu15i)
//============================================================================


struct  C_BFu1ll_BFu15ll  {
  char v1;
  __tsu64 v2:1;
  __tsu64 v3:15;
};
//SIG(1 C_BFu1ll_BFu15ll) C1{ Fc FL:1 FL:15}



static void Test_C_BFu1ll_BFu15ll()
{
  {
    init_simple_test("C_BFu1ll_BFu15ll");
    static STRUCT_IF_C C_BFu1ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "C_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "C_BFu1ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu15ll, C_BFu1ll_BFu15ll)
//============================================================================


struct  C_BFu1ll_BFu15s  {
  char v1;
  __tsu64 v2:1;
  unsigned short v3:15;
};
//SIG(1 C_BFu1ll_BFu15s) C1{ Fc FL:1 Fs:15}



static void Test_C_BFu1ll_BFu15s()
{
  {
    init_simple_test("C_BFu1ll_BFu15s");
    static STRUCT_IF_C C_BFu1ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu15s)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "C_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "C_BFu1ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu15s, C_BFu1ll_BFu15s)
//============================================================================


struct  C_BFu1ll_BFu16i  {
  char v1;
  __tsu64 v2:1;
  unsigned int v3:16;
};
//SIG(1 C_BFu1ll_BFu16i) C1{ Fc FL:1 Fi:16}



static void Test_C_BFu1ll_BFu16i()
{
  {
    init_simple_test("C_BFu1ll_BFu16i");
    static STRUCT_IF_C C_BFu1ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu16i)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "C_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "C_BFu1ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu16i, C_BFu1ll_BFu16i)
//============================================================================


struct  C_BFu1ll_BFu16ll  {
  char v1;
  __tsu64 v2:1;
  __tsu64 v3:16;
};
//SIG(1 C_BFu1ll_BFu16ll) C1{ Fc FL:1 FL:16}



static void Test_C_BFu1ll_BFu16ll()
{
  {
    init_simple_test("C_BFu1ll_BFu16ll");
    static STRUCT_IF_C C_BFu1ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "C_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "C_BFu1ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu16ll, C_BFu1ll_BFu16ll)
//============================================================================


struct  C_BFu1ll_BFu16s  {
  char v1;
  __tsu64 v2:1;
  unsigned short v3:16;
};
//SIG(1 C_BFu1ll_BFu16s) C1{ Fc FL:1 Fs:16}



static void Test_C_BFu1ll_BFu16s()
{
  {
    init_simple_test("C_BFu1ll_BFu16s");
    static STRUCT_IF_C C_BFu1ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu16s)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "C_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "C_BFu1ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu16s, C_BFu1ll_BFu16s)
//============================================================================


struct  C_BFu1ll_BFu17i  {
  char v1;
  __tsu64 v2:1;
  unsigned int v3:17;
};
//SIG(1 C_BFu1ll_BFu17i) C1{ Fc FL:1 Fi:17}



static void Test_C_BFu1ll_BFu17i()
{
  {
    init_simple_test("C_BFu1ll_BFu17i");
    static STRUCT_IF_C C_BFu1ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu17i)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "C_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "C_BFu1ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu17i, C_BFu1ll_BFu17i)
//============================================================================


struct  C_BFu1ll_BFu17ll  {
  char v1;
  __tsu64 v2:1;
  __tsu64 v3:17;
};
//SIG(1 C_BFu1ll_BFu17ll) C1{ Fc FL:1 FL:17}



static void Test_C_BFu1ll_BFu17ll()
{
  {
    init_simple_test("C_BFu1ll_BFu17ll");
    static STRUCT_IF_C C_BFu1ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "C_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "C_BFu1ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu17ll, C_BFu1ll_BFu17ll)
//============================================================================


struct  C_BFu1ll_BFu1c  {
  char v1;
  __tsu64 v2:1;
  unsigned char v3:1;
};
//SIG(1 C_BFu1ll_BFu1c) C1{ Fc FL:1 Fc:1}



static void Test_C_BFu1ll_BFu1c()
{
  {
    init_simple_test("C_BFu1ll_BFu1c");
    static STRUCT_IF_C C_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu1c)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "C_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu1c, C_BFu1ll_BFu1c)
//============================================================================


struct  C_BFu1ll_BFu1i  {
  char v1;
  __tsu64 v2:1;
  unsigned int v3:1;
};
//SIG(1 C_BFu1ll_BFu1i) C1{ Fc FL:1 Fi:1}



static void Test_C_BFu1ll_BFu1i()
{
  {
    init_simple_test("C_BFu1ll_BFu1i");
    static STRUCT_IF_C C_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu1i)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "C_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu1i, C_BFu1ll_BFu1i)
//============================================================================


struct  C_BFu1ll_BFu1ll  {
  char v1;
  __tsu64 v2:1;
  __tsu64 v3:1;
};
//SIG(1 C_BFu1ll_BFu1ll) C1{ Fc FL:1 FL:1}



static void Test_C_BFu1ll_BFu1ll()
{
  {
    init_simple_test("C_BFu1ll_BFu1ll");
    static STRUCT_IF_C C_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "C_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu1ll, C_BFu1ll_BFu1ll)
//============================================================================


struct  C_BFu1ll_BFu1s  {
  char v1;
  __tsu64 v2:1;
  unsigned short v3:1;
};
//SIG(1 C_BFu1ll_BFu1s) C1{ Fc FL:1 Fs:1}



static void Test_C_BFu1ll_BFu1s()
{
  {
    init_simple_test("C_BFu1ll_BFu1s");
    static STRUCT_IF_C C_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu1s)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "C_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu1s, C_BFu1ll_BFu1s)
//============================================================================


struct  C_BFu1ll_BFu31i  {
  char v1;
  __tsu64 v2:1;
  unsigned int v3:31;
};
//SIG(1 C_BFu1ll_BFu31i) C1{ Fc FL:1 Fi:31}



static void Test_C_BFu1ll_BFu31i()
{
  {
    init_simple_test("C_BFu1ll_BFu31i");
    static STRUCT_IF_C C_BFu1ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu31i)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "C_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "C_BFu1ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu31i, C_BFu1ll_BFu31i)
//============================================================================


struct  C_BFu1ll_BFu31ll  {
  char v1;
  __tsu64 v2:1;
  __tsu64 v3:31;
};
//SIG(1 C_BFu1ll_BFu31ll) C1{ Fc FL:1 FL:31}



static void Test_C_BFu1ll_BFu31ll()
{
  {
    init_simple_test("C_BFu1ll_BFu31ll");
    static STRUCT_IF_C C_BFu1ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, 1, "C_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, hide_ull(1LL<<30), "C_BFu1ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu31ll, C_BFu1ll_BFu31ll)
//============================================================================


struct  C_BFu1ll_BFu32i  {
  char v1;
  __tsu64 v2:1;
  unsigned int v3:32;
};
//SIG(1 C_BFu1ll_BFu32i) C1{ Fc FL:1 Fi:32}



static void Test_C_BFu1ll_BFu32i()
{
  {
    init_simple_test("C_BFu1ll_BFu32i");
    static STRUCT_IF_C C_BFu1ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu32i)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "C_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "C_BFu1ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu32i, C_BFu1ll_BFu32i)
//============================================================================


struct  C_BFu1ll_BFu32ll  {
  char v1;
  __tsu64 v2:1;
  __tsu64 v3:32;
};
//SIG(1 C_BFu1ll_BFu32ll) C1{ Fc FL:1 FL:32}



static void Test_C_BFu1ll_BFu32ll()
{
  {
    init_simple_test("C_BFu1ll_BFu32ll");
    static STRUCT_IF_C C_BFu1ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, 1, "C_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, hide_ull(1LL<<31), "C_BFu1ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu32ll, C_BFu1ll_BFu32ll)
//============================================================================


struct  C_BFu1ll_BFu33  {
  char v1;
  __tsu64 v2:1;
  __tsu64 v3:33;
};
//SIG(1 C_BFu1ll_BFu33) C1{ Fc FL:1 FL:33}



static void Test_C_BFu1ll_BFu33()
{
  {
    init_simple_test("C_BFu1ll_BFu33");
    static STRUCT_IF_C C_BFu1ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu33)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, 1, "C_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, hide_ull(1LL<<32), "C_BFu1ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu33, C_BFu1ll_BFu33)
//============================================================================


struct  C_BFu1ll_BFu7c  {
  char v1;
  __tsu64 v2:1;
  unsigned char v3:7;
};
//SIG(1 C_BFu1ll_BFu7c) C1{ Fc FL:1 Fc:7}



static void Test_C_BFu1ll_BFu7c()
{
  {
    init_simple_test("C_BFu1ll_BFu7c");
    static STRUCT_IF_C C_BFu1ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu7c)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "C_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "C_BFu1ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu7c, C_BFu1ll_BFu7c)
//============================================================================


struct  C_BFu1ll_BFu7i  {
  char v1;
  __tsu64 v2:1;
  unsigned int v3:7;
};
//SIG(1 C_BFu1ll_BFu7i) C1{ Fc FL:1 Fi:7}



static void Test_C_BFu1ll_BFu7i()
{
  {
    init_simple_test("C_BFu1ll_BFu7i");
    static STRUCT_IF_C C_BFu1ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu7i)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "C_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "C_BFu1ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu7i, C_BFu1ll_BFu7i)
//============================================================================


struct  C_BFu1ll_BFu7ll  {
  char v1;
  __tsu64 v2:1;
  __tsu64 v3:7;
};
//SIG(1 C_BFu1ll_BFu7ll) C1{ Fc FL:1 FL:7}



static void Test_C_BFu1ll_BFu7ll()
{
  {
    init_simple_test("C_BFu1ll_BFu7ll");
    static STRUCT_IF_C C_BFu1ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "C_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "C_BFu1ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu7ll, C_BFu1ll_BFu7ll)
//============================================================================


struct  C_BFu1ll_BFu7s  {
  char v1;
  __tsu64 v2:1;
  unsigned short v3:7;
};
//SIG(1 C_BFu1ll_BFu7s) C1{ Fc FL:1 Fs:7}



static void Test_C_BFu1ll_BFu7s()
{
  {
    init_simple_test("C_BFu1ll_BFu7s");
    static STRUCT_IF_C C_BFu1ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu7s)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "C_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "C_BFu1ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu7s, C_BFu1ll_BFu7s)
//============================================================================


struct  C_BFu1ll_BFu8c  {
  char v1;
  __tsu64 v2:1;
  unsigned char v3:8;
};
//SIG(1 C_BFu1ll_BFu8c) C1{ Fc FL:1 Fc:8}



static void Test_C_BFu1ll_BFu8c()
{
  {
    init_simple_test("C_BFu1ll_BFu8c");
    static STRUCT_IF_C C_BFu1ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu8c)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "C_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "C_BFu1ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu8c, C_BFu1ll_BFu8c)
//============================================================================


struct  C_BFu1ll_BFu8i  {
  char v1;
  __tsu64 v2:1;
  unsigned int v3:8;
};
//SIG(1 C_BFu1ll_BFu8i) C1{ Fc FL:1 Fi:8}



static void Test_C_BFu1ll_BFu8i()
{
  {
    init_simple_test("C_BFu1ll_BFu8i");
    static STRUCT_IF_C C_BFu1ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu8i)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "C_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "C_BFu1ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu8i, C_BFu1ll_BFu8i)
//============================================================================


struct  C_BFu1ll_BFu8ll  {
  char v1;
  __tsu64 v2:1;
  __tsu64 v3:8;
};
//SIG(1 C_BFu1ll_BFu8ll) C1{ Fc FL:1 FL:8}



static void Test_C_BFu1ll_BFu8ll()
{
  {
    init_simple_test("C_BFu1ll_BFu8ll");
    static STRUCT_IF_C C_BFu1ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "C_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "C_BFu1ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu8ll, C_BFu1ll_BFu8ll)
//============================================================================


struct  C_BFu1ll_BFu8s  {
  char v1;
  __tsu64 v2:1;
  unsigned short v3:8;
};
//SIG(1 C_BFu1ll_BFu8s) C1{ Fc FL:1 Fs:8}



static void Test_C_BFu1ll_BFu8s()
{
  {
    init_simple_test("C_BFu1ll_BFu8s");
    static STRUCT_IF_C C_BFu1ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu8s)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "C_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "C_BFu1ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu8s, C_BFu1ll_BFu8s)
//============================================================================


struct  C_BFu1ll_BFu9i  {
  char v1;
  __tsu64 v2:1;
  unsigned int v3:9;
};
//SIG(1 C_BFu1ll_BFu9i) C1{ Fc FL:1 Fi:9}



static void Test_C_BFu1ll_BFu9i()
{
  {
    init_simple_test("C_BFu1ll_BFu9i");
    static STRUCT_IF_C C_BFu1ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu9i)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "C_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "C_BFu1ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu9i, C_BFu1ll_BFu9i)
//============================================================================


struct  C_BFu1ll_BFu9ll  {
  char v1;
  __tsu64 v2:1;
  __tsu64 v3:9;
};
//SIG(1 C_BFu1ll_BFu9ll) C1{ Fc FL:1 FL:9}



static void Test_C_BFu1ll_BFu9ll()
{
  {
    init_simple_test("C_BFu1ll_BFu9ll");
    static STRUCT_IF_C C_BFu1ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "C_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "C_BFu1ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu9ll, C_BFu1ll_BFu9ll)
//============================================================================


struct  C_BFu1ll_BFu9s  {
  char v1;
  __tsu64 v2:1;
  unsigned short v3:9;
};
//SIG(1 C_BFu1ll_BFu9s) C1{ Fc FL:1 Fs:9}



static void Test_C_BFu1ll_BFu9s()
{
  {
    init_simple_test("C_BFu1ll_BFu9s");
    static STRUCT_IF_C C_BFu1ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu9s)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "C_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "C_BFu1ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu9s, C_BFu1ll_BFu9s)
//============================================================================


struct  C_BFu1ll_C  {
  char v1;
  __tsu64 v2:1;
  char v3;
};
//SIG(1 C_BFu1ll_C) C1{ Fc FL:1 Fc}



static void Test_C_BFu1ll_C()
{
  {
    init_simple_test("C_BFu1ll_C");
    static STRUCT_IF_C C_BFu1ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_C)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_C");
    check_field_offset(lv, v3, 2, "C_BFu1ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_C, C_BFu1ll_C)
//============================================================================


struct  C_BFu1ll_D  {
  char v1;
  __tsu64 v2:1;
  double v3;
};
//SIG(1 C_BFu1ll_D) C1{ Fc FL:1 FL}



static void Test_C_BFu1ll_D()
{
  {
    init_simple_test("C_BFu1ll_D");
    static STRUCT_IF_C C_BFu1ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu1ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_D)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu1ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_D, C_BFu1ll_D)
//============================================================================


struct  C_BFu1ll_F  {
  char v1;
  __tsu64 v2:1;
  float v3;
};
//SIG(1 C_BFu1ll_F) C1{ Fc FL:1 Fi}



static void Test_C_BFu1ll_F()
{
  {
    init_simple_test("C_BFu1ll_F");
    static STRUCT_IF_C C_BFu1ll_F lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_F)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_F");
    check_field_offset(lv, v3, 4, "C_BFu1ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_F, C_BFu1ll_F)
//============================================================================


struct  C_BFu1ll_I  {
  char v1;
  __tsu64 v2:1;
  int v3;
};
//SIG(1 C_BFu1ll_I) C1{ Fc FL:1 Fi}



static void Test_C_BFu1ll_I()
{
  {
    init_simple_test("C_BFu1ll_I");
    static STRUCT_IF_C C_BFu1ll_I lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_I)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_I");
    check_field_offset(lv, v3, 4, "C_BFu1ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_I, C_BFu1ll_I)
//============================================================================


struct  C_BFu1ll_Ip  {
  char v1;
  __tsu64 v2:1;
  int *v3;
};
//SIG(1 C_BFu1ll_Ip) C1{ Fc FL:1 Fp}



static void Test_C_BFu1ll_Ip()
{
  {
    init_simple_test("C_BFu1ll_Ip");
    static STRUCT_IF_C C_BFu1ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu1ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_Ip)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu1ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_Ip, C_BFu1ll_Ip)
//============================================================================


struct  C_BFu1ll_L  {
  char v1;
  __tsu64 v2:1;
  __tsi64 v3;
};
//SIG(1 C_BFu1ll_L) C1{ Fc FL:1 FL}



static void Test_C_BFu1ll_L()
{
  {
    init_simple_test("C_BFu1ll_L");
    static STRUCT_IF_C C_BFu1ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu1ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_L)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu1ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_L, C_BFu1ll_L)
//============================================================================


struct  C_BFu1ll_S  {
  char v1;
  __tsu64 v2:1;
  short v3;
};
//SIG(1 C_BFu1ll_S) C1{ Fc FL:1 Fs}



static void Test_C_BFu1ll_S()
{
  {
    init_simple_test("C_BFu1ll_S");
    static STRUCT_IF_C C_BFu1ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_S)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_S");
    check_field_offset(lv, v3, 2, "C_BFu1ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_S, C_BFu1ll_S)
//============================================================================


struct  C_BFu1ll_Uc  {
  char v1;
  __tsu64 v2:1;
  unsigned char v3;
};
//SIG(1 C_BFu1ll_Uc) C1{ Fc FL:1 Fc}



static void Test_C_BFu1ll_Uc()
{
  {
    init_simple_test("C_BFu1ll_Uc");
    static STRUCT_IF_C C_BFu1ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_Uc)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_Uc");
    check_field_offset(lv, v3, 2, "C_BFu1ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_Uc, C_BFu1ll_Uc)
//============================================================================


struct  C_BFu1ll_Ui  {
  char v1;
  __tsu64 v2:1;
  unsigned int v3;
};
//SIG(1 C_BFu1ll_Ui) C1{ Fc FL:1 Fi}



static void Test_C_BFu1ll_Ui()
{
  {
    init_simple_test("C_BFu1ll_Ui");
    static STRUCT_IF_C C_BFu1ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_Ui)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_Ui");
    check_field_offset(lv, v3, 4, "C_BFu1ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_Ui, C_BFu1ll_Ui)
//============================================================================


struct  C_BFu1ll_Ul  {
  char v1;
  __tsu64 v2:1;
  __tsu64 v3;
};
//SIG(1 C_BFu1ll_Ul) C1{ Fc FL:1 FL}



static void Test_C_BFu1ll_Ul()
{
  {
    init_simple_test("C_BFu1ll_Ul");
    static STRUCT_IF_C C_BFu1ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu1ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_Ul)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu1ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_Ul, C_BFu1ll_Ul)
//============================================================================


struct  C_BFu1ll_Us  {
  char v1;
  __tsu64 v2:1;
  unsigned short v3;
};
//SIG(1 C_BFu1ll_Us) C1{ Fc FL:1 Fs}



static void Test_C_BFu1ll_Us()
{
  {
    init_simple_test("C_BFu1ll_Us");
    static STRUCT_IF_C C_BFu1ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_Us)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_Us");
    check_field_offset(lv, v3, 2, "C_BFu1ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_Us, C_BFu1ll_Us)
//============================================================================


struct  C_BFu1ll_Vp  {
  char v1;
  __tsu64 v2:1;
  void *v3;
};
//SIG(1 C_BFu1ll_Vp) C1{ Fc FL:1 Fp}



static void Test_C_BFu1ll_Vp()
{
  {
    init_simple_test("C_BFu1ll_Vp");
    static STRUCT_IF_C C_BFu1ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu1ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_Vp)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu1ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_Vp, C_BFu1ll_Vp)
//============================================================================


struct  C_BFu1s  {
  char v1;
  unsigned short v2:1;
};
//SIG(1 C_BFu1s) C1{ Fc Fs:1}



static void Test_C_BFu1s()
{
  {
    init_simple_test("C_BFu1s");
    static STRUCT_IF_C C_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu1s)");
    check_field_offset(lv, v1, 0, "C_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s, C_BFu1s)
//============================================================================


struct  C_BFu1s_BFu15i  {
  char v1;
  unsigned short v2:1;
  unsigned int v3:15;
};
//SIG(1 C_BFu1s_BFu15i) C1{ Fc Fs:1 Fi:15}



static void Test_C_BFu1s_BFu15i()
{
  {
    init_simple_test("C_BFu1s_BFu15i");
    static STRUCT_IF_C C_BFu1s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1s_BFu15i)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "C_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "C_BFu1s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu15i, C_BFu1s_BFu15i)
//============================================================================


struct  C_BFu1s_BFu15ll  {
  char v1;
  unsigned short v2:1;
  __tsu64 v3:15;
};
//SIG(1 C_BFu1s_BFu15ll) C1{ Fc Fs:1 FL:15}



static void Test_C_BFu1s_BFu15ll()
{
  {
    init_simple_test("C_BFu1s_BFu15ll");
    static STRUCT_IF_C C_BFu1s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1s_BFu15ll)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "C_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "C_BFu1s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu15ll, C_BFu1s_BFu15ll)
//============================================================================


struct  C_BFu1s_BFu15s  {
  char v1;
  unsigned short v2:1;
  unsigned short v3:15;
};
//SIG(1 C_BFu1s_BFu15s) C1{ Fc Fs:1 Fs:15}



static void Test_C_BFu1s_BFu15s()
{
  {
    init_simple_test("C_BFu1s_BFu15s");
    static STRUCT_IF_C C_BFu1s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu1s_BFu15s)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "C_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "C_BFu1s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu15s, C_BFu1s_BFu15s)
//============================================================================


struct  C_BFu1s_BFu16i  {
  char v1;
  unsigned short v2:1;
  unsigned int v3:16;
};
//SIG(1 C_BFu1s_BFu16i) C1{ Fc Fs:1 Fi:16}



static void Test_C_BFu1s_BFu16i()
{
  {
    init_simple_test("C_BFu1s_BFu16i");
    static STRUCT_IF_C C_BFu1s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1s_BFu16i)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "C_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "C_BFu1s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu16i, C_BFu1s_BFu16i)
//============================================================================


struct  C_BFu1s_BFu16ll  {
  char v1;
  unsigned short v2:1;
  __tsu64 v3:16;
};
//SIG(1 C_BFu1s_BFu16ll) C1{ Fc Fs:1 FL:16}



static void Test_C_BFu1s_BFu16ll()
{
  {
    init_simple_test("C_BFu1s_BFu16ll");
    static STRUCT_IF_C C_BFu1s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1s_BFu16ll)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "C_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "C_BFu1s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu16ll, C_BFu1s_BFu16ll)
//============================================================================


struct  C_BFu1s_BFu16s  {
  char v1;
  unsigned short v2:1;
  unsigned short v3:16;
};
//SIG(1 C_BFu1s_BFu16s) C1{ Fc Fs:1 Fs:16}



static void Test_C_BFu1s_BFu16s()
{
  {
    init_simple_test("C_BFu1s_BFu16s");
    static STRUCT_IF_C C_BFu1s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu1s_BFu16s)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "C_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "C_BFu1s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu16s, C_BFu1s_BFu16s)
//============================================================================


struct  C_BFu1s_BFu17i  {
  char v1;
  unsigned short v2:1;
  unsigned int v3:17;
};
//SIG(1 C_BFu1s_BFu17i) C1{ Fc Fs:1 Fi:17}



static void Test_C_BFu1s_BFu17i()
{
  {
    init_simple_test("C_BFu1s_BFu17i");
    static STRUCT_IF_C C_BFu1s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1s_BFu17i)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "C_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "C_BFu1s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu17i, C_BFu1s_BFu17i)
//============================================================================


struct  C_BFu1s_BFu17ll  {
  char v1;
  unsigned short v2:1;
  __tsu64 v3:17;
};
//SIG(1 C_BFu1s_BFu17ll) C1{ Fc Fs:1 FL:17}



static void Test_C_BFu1s_BFu17ll()
{
  {
    init_simple_test("C_BFu1s_BFu17ll");
    static STRUCT_IF_C C_BFu1s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1s_BFu17ll)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "C_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "C_BFu1s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu17ll, C_BFu1s_BFu17ll)
//============================================================================


struct  C_BFu1s_BFu1c  {
  char v1;
  unsigned short v2:1;
  unsigned char v3:1;
};
//SIG(1 C_BFu1s_BFu1c) C1{ Fc Fs:1 Fc:1}



static void Test_C_BFu1s_BFu1c()
{
  {
    init_simple_test("C_BFu1s_BFu1c");
    static STRUCT_IF_C C_BFu1s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu1s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu1s_BFu1c)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "C_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu1c, C_BFu1s_BFu1c)
//============================================================================


struct  C_BFu1s_BFu1i  {
  char v1;
  unsigned short v2:1;
  unsigned int v3:1;
};
//SIG(1 C_BFu1s_BFu1i) C1{ Fc Fs:1 Fi:1}



static void Test_C_BFu1s_BFu1i()
{
  {
    init_simple_test("C_BFu1s_BFu1i");
    static STRUCT_IF_C C_BFu1s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1s_BFu1i)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "C_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu1i, C_BFu1s_BFu1i)
//============================================================================


struct  C_BFu1s_BFu1ll  {
  char v1;
  unsigned short v2:1;
  __tsu64 v3:1;
};
//SIG(1 C_BFu1s_BFu1ll) C1{ Fc Fs:1 FL:1}



static void Test_C_BFu1s_BFu1ll()
{
  {
    init_simple_test("C_BFu1s_BFu1ll");
    static STRUCT_IF_C C_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1s_BFu1ll)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "C_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu1ll, C_BFu1s_BFu1ll)
//============================================================================


struct  C_BFu1s_BFu1s  {
  char v1;
  unsigned short v2:1;
  unsigned short v3:1;
};
//SIG(1 C_BFu1s_BFu1s) C1{ Fc Fs:1 Fs:1}



static void Test_C_BFu1s_BFu1s()
{
  {
    init_simple_test("C_BFu1s_BFu1s");
    static STRUCT_IF_C C_BFu1s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu1s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu1s_BFu1s)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "C_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu1s, C_BFu1s_BFu1s)
//============================================================================


struct  C_BFu1s_BFu31i  {
  char v1;
  unsigned short v2:1;
  unsigned int v3:31;
};
//SIG(1 C_BFu1s_BFu31i) C1{ Fc Fs:1 Fi:31}



static void Test_C_BFu1s_BFu31i()
{
  {
    init_simple_test("C_BFu1s_BFu31i");
    static STRUCT_IF_C C_BFu1s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1s_BFu31i)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "C_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "C_BFu1s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu31i, C_BFu1s_BFu31i)
//============================================================================


struct  C_BFu1s_BFu31ll  {
  char v1;
  unsigned short v2:1;
  __tsu64 v3:31;
};
//SIG(1 C_BFu1s_BFu31ll) C1{ Fc Fs:1 FL:31}



static void Test_C_BFu1s_BFu31ll()
{
  {
    init_simple_test("C_BFu1s_BFu31ll");
    static STRUCT_IF_C C_BFu1s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1s_BFu31ll)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, 1, "C_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, hide_ull(1LL<<30), "C_BFu1s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu31ll, C_BFu1s_BFu31ll)
//============================================================================


struct  C_BFu1s_BFu32i  {
  char v1;
  unsigned short v2:1;
  unsigned int v3:32;
};
//SIG(1 C_BFu1s_BFu32i) C1{ Fc Fs:1 Fi:32}



static void Test_C_BFu1s_BFu32i()
{
  {
    init_simple_test("C_BFu1s_BFu32i");
    static STRUCT_IF_C C_BFu1s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1s_BFu32i)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "C_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "C_BFu1s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu32i, C_BFu1s_BFu32i)
//============================================================================


struct  C_BFu1s_BFu32ll  {
  char v1;
  unsigned short v2:1;
  __tsu64 v3:32;
};
//SIG(1 C_BFu1s_BFu32ll) C1{ Fc Fs:1 FL:32}



static void Test_C_BFu1s_BFu32ll()
{
  {
    init_simple_test("C_BFu1s_BFu32ll");
    static STRUCT_IF_C C_BFu1s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1s_BFu32ll)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, 1, "C_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, hide_ull(1LL<<31), "C_BFu1s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu32ll, C_BFu1s_BFu32ll)
//============================================================================


struct  C_BFu1s_BFu33  {
  char v1;
  unsigned short v2:1;
  __tsu64 v3:33;
};
//SIG(1 C_BFu1s_BFu33) C1{ Fc Fs:1 FL:33}



static void Test_C_BFu1s_BFu33()
{
  {
    init_simple_test("C_BFu1s_BFu33");
    static STRUCT_IF_C C_BFu1s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1s_BFu33)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, 1, "C_BFu1s_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, hide_ull(1LL<<32), "C_BFu1s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu33, C_BFu1s_BFu33)
//============================================================================


struct  C_BFu1s_BFu7c  {
  char v1;
  unsigned short v2:1;
  unsigned char v3:7;
};
//SIG(1 C_BFu1s_BFu7c) C1{ Fc Fs:1 Fc:7}



static void Test_C_BFu1s_BFu7c()
{
  {
    init_simple_test("C_BFu1s_BFu7c");
    static STRUCT_IF_C C_BFu1s_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu1s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu1s_BFu7c)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "C_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "C_BFu1s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu7c, C_BFu1s_BFu7c)
//============================================================================


struct  C_BFu1s_BFu7i  {
  char v1;
  unsigned short v2:1;
  unsigned int v3:7;
};
//SIG(1 C_BFu1s_BFu7i) C1{ Fc Fs:1 Fi:7}



static void Test_C_BFu1s_BFu7i()
{
  {
    init_simple_test("C_BFu1s_BFu7i");
    static STRUCT_IF_C C_BFu1s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1s_BFu7i)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "C_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "C_BFu1s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu7i, C_BFu1s_BFu7i)
//============================================================================


struct  C_BFu1s_BFu7ll  {
  char v1;
  unsigned short v2:1;
  __tsu64 v3:7;
};
//SIG(1 C_BFu1s_BFu7ll) C1{ Fc Fs:1 FL:7}



static void Test_C_BFu1s_BFu7ll()
{
  {
    init_simple_test("C_BFu1s_BFu7ll");
    static STRUCT_IF_C C_BFu1s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1s_BFu7ll)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "C_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "C_BFu1s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu7ll, C_BFu1s_BFu7ll)
//============================================================================


struct  C_BFu1s_BFu7s  {
  char v1;
  unsigned short v2:1;
  unsigned short v3:7;
};
//SIG(1 C_BFu1s_BFu7s) C1{ Fc Fs:1 Fs:7}



static void Test_C_BFu1s_BFu7s()
{
  {
    init_simple_test("C_BFu1s_BFu7s");
    static STRUCT_IF_C C_BFu1s_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu1s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu1s_BFu7s)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "C_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "C_BFu1s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu7s, C_BFu1s_BFu7s)
//============================================================================


struct  C_BFu1s_BFu8c  {
  char v1;
  unsigned short v2:1;
  unsigned char v3:8;
};
//SIG(1 C_BFu1s_BFu8c) C1{ Fc Fs:1 Fc:8}



static void Test_C_BFu1s_BFu8c()
{
  {
    init_simple_test("C_BFu1s_BFu8c");
    static STRUCT_IF_C C_BFu1s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu1s_BFu8c)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "C_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "C_BFu1s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu8c, C_BFu1s_BFu8c)
//============================================================================


struct  C_BFu1s_BFu8i  {
  char v1;
  unsigned short v2:1;
  unsigned int v3:8;
};
//SIG(1 C_BFu1s_BFu8i) C1{ Fc Fs:1 Fi:8}



static void Test_C_BFu1s_BFu8i()
{
  {
    init_simple_test("C_BFu1s_BFu8i");
    static STRUCT_IF_C C_BFu1s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1s_BFu8i)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "C_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "C_BFu1s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu8i, C_BFu1s_BFu8i)
//============================================================================


struct  C_BFu1s_BFu8ll  {
  char v1;
  unsigned short v2:1;
  __tsu64 v3:8;
};
//SIG(1 C_BFu1s_BFu8ll) C1{ Fc Fs:1 FL:8}



static void Test_C_BFu1s_BFu8ll()
{
  {
    init_simple_test("C_BFu1s_BFu8ll");
    static STRUCT_IF_C C_BFu1s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1s_BFu8ll)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "C_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "C_BFu1s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu8ll, C_BFu1s_BFu8ll)
//============================================================================


struct  C_BFu1s_BFu8s  {
  char v1;
  unsigned short v2:1;
  unsigned short v3:8;
};
//SIG(1 C_BFu1s_BFu8s) C1{ Fc Fs:1 Fs:8}



static void Test_C_BFu1s_BFu8s()
{
  {
    init_simple_test("C_BFu1s_BFu8s");
    static STRUCT_IF_C C_BFu1s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu1s_BFu8s)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "C_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "C_BFu1s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu8s, C_BFu1s_BFu8s)
//============================================================================


struct  C_BFu1s_BFu9i  {
  char v1;
  unsigned short v2:1;
  unsigned int v3:9;
};
//SIG(1 C_BFu1s_BFu9i) C1{ Fc Fs:1 Fi:9}



static void Test_C_BFu1s_BFu9i()
{
  {
    init_simple_test("C_BFu1s_BFu9i");
    static STRUCT_IF_C C_BFu1s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1s_BFu9i)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "C_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "C_BFu1s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu9i, C_BFu1s_BFu9i)
//============================================================================


struct  C_BFu1s_BFu9ll  {
  char v1;
  unsigned short v2:1;
  __tsu64 v3:9;
};
//SIG(1 C_BFu1s_BFu9ll) C1{ Fc Fs:1 FL:9}



static void Test_C_BFu1s_BFu9ll()
{
  {
    init_simple_test("C_BFu1s_BFu9ll");
    static STRUCT_IF_C C_BFu1s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1s_BFu9ll)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "C_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "C_BFu1s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu9ll, C_BFu1s_BFu9ll)
//============================================================================


struct  C_BFu1s_BFu9s  {
  char v1;
  unsigned short v2:1;
  unsigned short v3:9;
};
//SIG(1 C_BFu1s_BFu9s) C1{ Fc Fs:1 Fs:9}



static void Test_C_BFu1s_BFu9s()
{
  {
    init_simple_test("C_BFu1s_BFu9s");
    static STRUCT_IF_C C_BFu1s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu1s_BFu9s)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "C_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "C_BFu1s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu9s, C_BFu1s_BFu9s)
//============================================================================


struct  C_BFu1s_C  {
  char v1;
  unsigned short v2:1;
  char v3;
};
//SIG(1 C_BFu1s_C) C1{ Fc Fs:1 Fc}



static void Test_C_BFu1s_C()
{
  {
    init_simple_test("C_BFu1s_C");
    static STRUCT_IF_C C_BFu1s_C lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1s_C)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu1s_C)");
    check_field_offset(lv, v1, 0, "C_BFu1s_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_C");
    check_field_offset(lv, v3, 2, "C_BFu1s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_C, C_BFu1s_C)
//============================================================================


struct  C_BFu1s_D  {
  char v1;
  unsigned short v2:1;
  double v3;
};
//SIG(1 C_BFu1s_D) C1{ Fc Fs:1 FL}



static void Test_C_BFu1s_D()
{
  {
    init_simple_test("C_BFu1s_D");
    static STRUCT_IF_C C_BFu1s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu1s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1s_D)");
    check_field_offset(lv, v1, 0, "C_BFu1s_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu1s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_D, C_BFu1s_D)
//============================================================================


struct  C_BFu1s_F  {
  char v1;
  unsigned short v2:1;
  float v3;
};
//SIG(1 C_BFu1s_F) C1{ Fc Fs:1 Fi}



static void Test_C_BFu1s_F()
{
  {
    init_simple_test("C_BFu1s_F");
    static STRUCT_IF_C C_BFu1s_F lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1s_F)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1s_F)");
    check_field_offset(lv, v1, 0, "C_BFu1s_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_F");
    check_field_offset(lv, v3, 4, "C_BFu1s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_F, C_BFu1s_F)
//============================================================================


struct  C_BFu1s_I  {
  char v1;
  unsigned short v2:1;
  int v3;
};
//SIG(1 C_BFu1s_I) C1{ Fc Fs:1 Fi}



static void Test_C_BFu1s_I()
{
  {
    init_simple_test("C_BFu1s_I");
    static STRUCT_IF_C C_BFu1s_I lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1s_I)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1s_I)");
    check_field_offset(lv, v1, 0, "C_BFu1s_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_I");
    check_field_offset(lv, v3, 4, "C_BFu1s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_I, C_BFu1s_I)
//============================================================================


struct  C_BFu1s_Ip  {
  char v1;
  unsigned short v2:1;
  int *v3;
};
//SIG(1 C_BFu1s_Ip) C1{ Fc Fs:1 Fp}



static void Test_C_BFu1s_Ip()
{
  {
    init_simple_test("C_BFu1s_Ip");
    static STRUCT_IF_C C_BFu1s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu1s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1s_Ip)");
    check_field_offset(lv, v1, 0, "C_BFu1s_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu1s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_Ip, C_BFu1s_Ip)
//============================================================================


struct  C_BFu1s_L  {
  char v1;
  unsigned short v2:1;
  __tsi64 v3;
};
//SIG(1 C_BFu1s_L) C1{ Fc Fs:1 FL}



static void Test_C_BFu1s_L()
{
  {
    init_simple_test("C_BFu1s_L");
    static STRUCT_IF_C C_BFu1s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu1s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1s_L)");
    check_field_offset(lv, v1, 0, "C_BFu1s_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu1s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_L, C_BFu1s_L)
//============================================================================


struct  C_BFu1s_S  {
  char v1;
  unsigned short v2:1;
  short v3;
};
//SIG(1 C_BFu1s_S) C1{ Fc Fs:1 Fs}



static void Test_C_BFu1s_S()
{
  {
    init_simple_test("C_BFu1s_S");
    static STRUCT_IF_C C_BFu1s_S lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1s_S)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu1s_S)");
    check_field_offset(lv, v1, 0, "C_BFu1s_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_S");
    check_field_offset(lv, v3, 2, "C_BFu1s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_S, C_BFu1s_S)
//============================================================================


struct  C_BFu1s_Uc  {
  char v1;
  unsigned short v2:1;
  unsigned char v3;
};
//SIG(1 C_BFu1s_Uc) C1{ Fc Fs:1 Fc}



static void Test_C_BFu1s_Uc()
{
  {
    init_simple_test("C_BFu1s_Uc");
    static STRUCT_IF_C C_BFu1s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu1s_Uc)");
    check_field_offset(lv, v1, 0, "C_BFu1s_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_Uc");
    check_field_offset(lv, v3, 2, "C_BFu1s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_Uc, C_BFu1s_Uc)
//============================================================================


struct  C_BFu1s_Ui  {
  char v1;
  unsigned short v2:1;
  unsigned int v3;
};
//SIG(1 C_BFu1s_Ui) C1{ Fc Fs:1 Fi}



static void Test_C_BFu1s_Ui()
{
  {
    init_simple_test("C_BFu1s_Ui");
    static STRUCT_IF_C C_BFu1s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu1s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1s_Ui)");
    check_field_offset(lv, v1, 0, "C_BFu1s_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_Ui");
    check_field_offset(lv, v3, 4, "C_BFu1s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_Ui, C_BFu1s_Ui)
//============================================================================


struct  C_BFu1s_Ul  {
  char v1;
  unsigned short v2:1;
  __tsu64 v3;
};
//SIG(1 C_BFu1s_Ul) C1{ Fc Fs:1 FL}



static void Test_C_BFu1s_Ul()
{
  {
    init_simple_test("C_BFu1s_Ul");
    static STRUCT_IF_C C_BFu1s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu1s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1s_Ul)");
    check_field_offset(lv, v1, 0, "C_BFu1s_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu1s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_Ul, C_BFu1s_Ul)
//============================================================================


struct  C_BFu1s_Us  {
  char v1;
  unsigned short v2:1;
  unsigned short v3;
};
//SIG(1 C_BFu1s_Us) C1{ Fc Fs:1 Fs}



static void Test_C_BFu1s_Us()
{
  {
    init_simple_test("C_BFu1s_Us");
    static STRUCT_IF_C C_BFu1s_Us lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu1s_Us)");
    check_field_offset(lv, v1, 0, "C_BFu1s_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_Us");
    check_field_offset(lv, v3, 2, "C_BFu1s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_Us, C_BFu1s_Us)
//============================================================================


struct  C_BFu1s_Vp  {
  char v1;
  unsigned short v2:1;
  void *v3;
};
//SIG(1 C_BFu1s_Vp) C1{ Fc Fs:1 Fp}



static void Test_C_BFu1s_Vp()
{
  {
    init_simple_test("C_BFu1s_Vp");
    static STRUCT_IF_C C_BFu1s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu1s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1s_Vp)");
    check_field_offset(lv, v1, 0, "C_BFu1s_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "C_BFu1s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_Vp, C_BFu1s_Vp)
//============================================================================


struct  C_BFu31i  {
  char v1;
  unsigned int v2:31;
};
//SIG(1 C_BFu31i) C1{ Fc Fi:31}



static void Test_C_BFu31i()
{
  {
    init_simple_test("C_BFu31i");
    static STRUCT_IF_C C_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i)");
    check_field_offset(lv, v1, 0, "C_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i, C_BFu31i)
//============================================================================


struct  C_BFu31i_BFu15i  {
  char v1;
  unsigned int v2:31;
  unsigned int v3:15;
};
//SIG(1 C_BFu31i_BFu15i) C1{ Fc Fi:31 Fi:15}



static void Test_C_BFu31i_BFu15i()
{
  {
    init_simple_test("C_BFu31i_BFu15i");
    static STRUCT_IF_C C_BFu31i_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu31i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i_BFu15i)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu15i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "C_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "C_BFu31i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu15i, C_BFu31i_BFu15i)
//============================================================================


struct  C_BFu31i_BFu15ll  {
  char v1;
  unsigned int v2:31;
  __tsu64 v3:15;
};
//SIG(1 C_BFu31i_BFu15ll) C1{ Fc Fi:31 FL:15}



static void Test_C_BFu31i_BFu15ll()
{
  {
    init_simple_test("C_BFu31i_BFu15ll");
    static STRUCT_IF_C C_BFu31i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu31i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31i_BFu15ll)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, 1, "C_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, hide_ull(1LL<<14), "C_BFu31i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu15ll, C_BFu31i_BFu15ll)
//============================================================================


struct  C_BFu31i_BFu15s  {
  char v1;
  unsigned int v2:31;
  unsigned short v3:15;
};
//SIG(1 C_BFu31i_BFu15s) C1{ Fc Fi:31 Fs:15}



static void Test_C_BFu31i_BFu15s()
{
  {
    init_simple_test("C_BFu31i_BFu15s");
    static STRUCT_IF_C C_BFu31i_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu31i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i_BFu15s)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu15s.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "C_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "C_BFu31i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu15s, C_BFu31i_BFu15s)
//============================================================================


struct  C_BFu31i_BFu16i  {
  char v1;
  unsigned int v2:31;
  unsigned int v3:16;
};
//SIG(1 C_BFu31i_BFu16i) C1{ Fc Fi:31 Fi:16}



static void Test_C_BFu31i_BFu16i()
{
  {
    init_simple_test("C_BFu31i_BFu16i");
    static STRUCT_IF_C C_BFu31i_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu31i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i_BFu16i)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu16i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "C_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "C_BFu31i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu16i, C_BFu31i_BFu16i)
//============================================================================


struct  C_BFu31i_BFu16ll  {
  char v1;
  unsigned int v2:31;
  __tsu64 v3:16;
};
//SIG(1 C_BFu31i_BFu16ll) C1{ Fc Fi:31 FL:16}



static void Test_C_BFu31i_BFu16ll()
{
  {
    init_simple_test("C_BFu31i_BFu16ll");
    static STRUCT_IF_C C_BFu31i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu31i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31i_BFu16ll)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, 1, "C_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, hide_ull(1LL<<15), "C_BFu31i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu16ll, C_BFu31i_BFu16ll)
//============================================================================


struct  C_BFu31i_BFu16s  {
  char v1;
  unsigned int v2:31;
  unsigned short v3:16;
};
//SIG(1 C_BFu31i_BFu16s) C1{ Fc Fi:31 Fs:16}



static void Test_C_BFu31i_BFu16s()
{
  {
    init_simple_test("C_BFu31i_BFu16s");
    static STRUCT_IF_C C_BFu31i_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu31i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i_BFu16s)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu16s.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "C_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "C_BFu31i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu16s, C_BFu31i_BFu16s)
//============================================================================


struct  C_BFu31i_BFu17i  {
  char v1;
  unsigned int v2:31;
  unsigned int v3:17;
};
//SIG(1 C_BFu31i_BFu17i) C1{ Fc Fi:31 Fi:17}



static void Test_C_BFu31i_BFu17i()
{
  {
    init_simple_test("C_BFu31i_BFu17i");
    static STRUCT_IF_C C_BFu31i_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu31i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i_BFu17i)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "C_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "C_BFu31i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu17i, C_BFu31i_BFu17i)
//============================================================================


struct  C_BFu31i_BFu17ll  {
  char v1;
  unsigned int v2:31;
  __tsu64 v3:17;
};
//SIG(1 C_BFu31i_BFu17ll) C1{ Fc Fi:31 FL:17}



static void Test_C_BFu31i_BFu17ll()
{
  {
    init_simple_test("C_BFu31i_BFu17ll");
    static STRUCT_IF_C C_BFu31i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu31i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31i_BFu17ll)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, 1, "C_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, hide_ull(1LL<<16), "C_BFu31i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu17ll, C_BFu31i_BFu17ll)
//============================================================================


struct  C_BFu31i_BFu1c  {
  char v1;
  unsigned int v2:31;
  unsigned char v3:1;
};
//SIG(1 C_BFu31i_BFu1c) C1{ Fc Fi:31 Fc:1}



static void Test_C_BFu31i_BFu1c()
{
  {
    init_simple_test("C_BFu31i_BFu1c");
    static STRUCT_IF_C C_BFu31i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i_BFu1c)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu1c");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "C_BFu31i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu1c, C_BFu31i_BFu1c)
//============================================================================


struct  C_BFu31i_BFu1i  {
  char v1;
  unsigned int v2:31;
  unsigned int v3:1;
};
//SIG(1 C_BFu31i_BFu1i) C1{ Fc Fi:31 Fi:1}



static void Test_C_BFu31i_BFu1i()
{
  {
    init_simple_test("C_BFu31i_BFu1i");
    static STRUCT_IF_C C_BFu31i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i_BFu1i)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu1i");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "C_BFu31i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu1i, C_BFu31i_BFu1i)
//============================================================================


struct  C_BFu31i_BFu1ll  {
  char v1;
  unsigned int v2:31;
  __tsu64 v3:1;
};
//SIG(1 C_BFu31i_BFu1ll) C1{ Fc Fi:31 FL:1}



static void Test_C_BFu31i_BFu1ll()
{
  {
    init_simple_test("C_BFu31i_BFu1ll");
    static STRUCT_IF_C C_BFu31i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31i_BFu1ll)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu1ll");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "C_BFu31i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu1ll, C_BFu31i_BFu1ll)
//============================================================================


struct  C_BFu31i_BFu1s  {
  char v1;
  unsigned int v2:31;
  unsigned short v3:1;
};
//SIG(1 C_BFu31i_BFu1s) C1{ Fc Fi:31 Fs:1}



static void Test_C_BFu31i_BFu1s()
{
  {
    init_simple_test("C_BFu31i_BFu1s");
    static STRUCT_IF_C C_BFu31i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i_BFu1s)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu1s");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "C_BFu31i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu1s, C_BFu31i_BFu1s)
//============================================================================


struct  C_BFu31i_BFu31i  {
  char v1;
  unsigned int v2:31;
  unsigned int v3:31;
};
//SIG(1 C_BFu31i_BFu31i) C1{ Fc Fi:31 Fi:31}



static void Test_C_BFu31i_BFu31i()
{
  {
    init_simple_test("C_BFu31i_BFu31i");
    static STRUCT_IF_C C_BFu31i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu31i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i_BFu31i)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "C_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu31i, C_BFu31i_BFu31i)
//============================================================================


struct  C_BFu31i_BFu31ll  {
  char v1;
  unsigned int v2:31;
  __tsu64 v3:31;
};
//SIG(1 C_BFu31i_BFu31ll) C1{ Fc Fi:31 FL:31}



static void Test_C_BFu31i_BFu31ll()
{
  {
    init_simple_test("C_BFu31i_BFu31ll");
    static STRUCT_IF_C C_BFu31i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31i_BFu31ll)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "C_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "C_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu31ll, C_BFu31i_BFu31ll)
//============================================================================


struct  C_BFu31i_BFu32i  {
  char v1;
  unsigned int v2:31;
  unsigned int v3:32;
};
//SIG(1 C_BFu31i_BFu32i) C1{ Fc Fi:31 Fi:32}



static void Test_C_BFu31i_BFu32i()
{
  {
    init_simple_test("C_BFu31i_BFu32i");
    static STRUCT_IF_C C_BFu31i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu31i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i_BFu32i)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "C_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "C_BFu31i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu32i, C_BFu31i_BFu32i)
//============================================================================


struct  C_BFu31i_BFu32ll  {
  char v1;
  unsigned int v2:31;
  __tsu64 v3:32;
};
//SIG(1 C_BFu31i_BFu32ll) C1{ Fc Fi:31 FL:32}



static void Test_C_BFu31i_BFu32ll()
{
  {
    init_simple_test("C_BFu31i_BFu32ll");
    static STRUCT_IF_C C_BFu31i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu31i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31i_BFu32ll)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, 1, "C_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, hide_ull(1LL<<31), "C_BFu31i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu32ll, C_BFu31i_BFu32ll)
//============================================================================


struct  C_BFu31i_BFu33  {
  char v1;
  unsigned int v2:31;
  __tsu64 v3:33;
};
//SIG(1 C_BFu31i_BFu33) C1{ Fc Fi:31 FL:33}



static void Test_C_BFu31i_BFu33()
{
  {
    init_simple_test("C_BFu31i_BFu33");
    static STRUCT_IF_C C_BFu31i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu31i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31i_BFu33)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu33.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, 1, "C_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, hide_ull(1LL<<32), "C_BFu31i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu33, C_BFu31i_BFu33)
//============================================================================


struct  C_BFu31i_BFu7c  {
  char v1;
  unsigned int v2:31;
  unsigned char v3:7;
};
//SIG(1 C_BFu31i_BFu7c) C1{ Fc Fi:31 Fc:7}



static void Test_C_BFu31i_BFu7c()
{
  {
    init_simple_test("C_BFu31i_BFu7c");
    static STRUCT_IF_C C_BFu31i_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu31i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i_BFu7c)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu7c.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "C_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "C_BFu31i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu7c, C_BFu31i_BFu7c)
//============================================================================


struct  C_BFu31i_BFu7i  {
  char v1;
  unsigned int v2:31;
  unsigned int v3:7;
};
//SIG(1 C_BFu31i_BFu7i) C1{ Fc Fi:31 Fi:7}



static void Test_C_BFu31i_BFu7i()
{
  {
    init_simple_test("C_BFu31i_BFu7i");
    static STRUCT_IF_C C_BFu31i_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu31i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i_BFu7i)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu7i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "C_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "C_BFu31i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu7i, C_BFu31i_BFu7i)
//============================================================================


struct  C_BFu31i_BFu7ll  {
  char v1;
  unsigned int v2:31;
  __tsu64 v3:7;
};
//SIG(1 C_BFu31i_BFu7ll) C1{ Fc Fi:31 FL:7}



static void Test_C_BFu31i_BFu7ll()
{
  {
    init_simple_test("C_BFu31i_BFu7ll");
    static STRUCT_IF_C C_BFu31i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu31i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31i_BFu7ll)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, 1, "C_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, hide_ull(1LL<<6), "C_BFu31i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu7ll, C_BFu31i_BFu7ll)
//============================================================================


struct  C_BFu31i_BFu7s  {
  char v1;
  unsigned int v2:31;
  unsigned short v3:7;
};
//SIG(1 C_BFu31i_BFu7s) C1{ Fc Fi:31 Fs:7}



static void Test_C_BFu31i_BFu7s()
{
  {
    init_simple_test("C_BFu31i_BFu7s");
    static STRUCT_IF_C C_BFu31i_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu31i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i_BFu7s)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu7s.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "C_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "C_BFu31i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu7s, C_BFu31i_BFu7s)
//============================================================================


struct  C_BFu31i_BFu8c  {
  char v1;
  unsigned int v2:31;
  unsigned char v3:8;
};
//SIG(1 C_BFu31i_BFu8c) C1{ Fc Fi:31 Fc:8}



static void Test_C_BFu31i_BFu8c()
{
  {
    init_simple_test("C_BFu31i_BFu8c");
    static STRUCT_IF_C C_BFu31i_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu31i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i_BFu8c)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu8c.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "C_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "C_BFu31i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu8c, C_BFu31i_BFu8c)
//============================================================================


struct  C_BFu31i_BFu8i  {
  char v1;
  unsigned int v2:31;
  unsigned int v3:8;
};
//SIG(1 C_BFu31i_BFu8i) C1{ Fc Fi:31 Fi:8}



static void Test_C_BFu31i_BFu8i()
{
  {
    init_simple_test("C_BFu31i_BFu8i");
    static STRUCT_IF_C C_BFu31i_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu31i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i_BFu8i)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu8i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "C_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "C_BFu31i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu8i, C_BFu31i_BFu8i)
//============================================================================


struct  C_BFu31i_BFu8ll  {
  char v1;
  unsigned int v2:31;
  __tsu64 v3:8;
};
//SIG(1 C_BFu31i_BFu8ll) C1{ Fc Fi:31 FL:8}



static void Test_C_BFu31i_BFu8ll()
{
  {
    init_simple_test("C_BFu31i_BFu8ll");
    static STRUCT_IF_C C_BFu31i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu31i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31i_BFu8ll)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, 1, "C_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, hide_ull(1LL<<7), "C_BFu31i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu8ll, C_BFu31i_BFu8ll)
//============================================================================


struct  C_BFu31i_BFu8s  {
  char v1;
  unsigned int v2:31;
  unsigned short v3:8;
};
//SIG(1 C_BFu31i_BFu8s) C1{ Fc Fi:31 Fs:8}



static void Test_C_BFu31i_BFu8s()
{
  {
    init_simple_test("C_BFu31i_BFu8s");
    static STRUCT_IF_C C_BFu31i_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu31i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i_BFu8s)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu8s.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "C_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "C_BFu31i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu8s, C_BFu31i_BFu8s)
//============================================================================


struct  C_BFu31i_BFu9i  {
  char v1;
  unsigned int v2:31;
  unsigned int v3:9;
};
//SIG(1 C_BFu31i_BFu9i) C1{ Fc Fi:31 Fi:9}



static void Test_C_BFu31i_BFu9i()
{
  {
    init_simple_test("C_BFu31i_BFu9i");
    static STRUCT_IF_C C_BFu31i_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu31i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i_BFu9i)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu9i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "C_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "C_BFu31i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu9i, C_BFu31i_BFu9i)
//============================================================================


struct  C_BFu31i_BFu9ll  {
  char v1;
  unsigned int v2:31;
  __tsu64 v3:9;
};
//SIG(1 C_BFu31i_BFu9ll) C1{ Fc Fi:31 FL:9}



static void Test_C_BFu31i_BFu9ll()
{
  {
    init_simple_test("C_BFu31i_BFu9ll");
    static STRUCT_IF_C C_BFu31i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu31i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31i_BFu9ll)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, 1, "C_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, hide_ull(1LL<<8), "C_BFu31i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu9ll, C_BFu31i_BFu9ll)
//============================================================================


struct  C_BFu31i_BFu9s  {
  char v1;
  unsigned int v2:31;
  unsigned short v3:9;
};
//SIG(1 C_BFu31i_BFu9s) C1{ Fc Fi:31 Fs:9}



static void Test_C_BFu31i_BFu9s()
{
  {
    init_simple_test("C_BFu31i_BFu9s");
    static STRUCT_IF_C C_BFu31i_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu31i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i_BFu9s)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu9s.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "C_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "C_BFu31i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu9s, C_BFu31i_BFu9s)
//============================================================================


struct  C_BFu31i_C  {
  char v1;
  unsigned int v2:31;
  char v3;
};
//SIG(1 C_BFu31i_C) C1{ Fc Fi:31 Fc}



static void Test_C_BFu31i_C()
{
  {
    init_simple_test("C_BFu31i_C");
    static STRUCT_IF_C C_BFu31i_C lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu31i_C)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i_C)");
    check_field_offset(lv, v1, 0, "C_BFu31i_C.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_C");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_C");
    check_field_offset(lv, v3, 8, "C_BFu31i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_C, C_BFu31i_C)
//============================================================================


struct  C_BFu31i_D  {
  char v1;
  unsigned int v2:31;
  double v3;
};
//SIG(1 C_BFu31i_D) C1{ Fc Fi:31 FL}



static void Test_C_BFu31i_D()
{
  {
    init_simple_test("C_BFu31i_D");
    static STRUCT_IF_C C_BFu31i_D lv;
    check2(sizeof(lv), 16, "sizeof(C_BFu31i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31i_D)");
    check_field_offset(lv, v1, 0, "C_BFu31i_D.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_D");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_D");
    check_field_offset(lv, v3, 8, "C_BFu31i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_D, C_BFu31i_D)
//============================================================================


struct  C_BFu31i_F  {
  char v1;
  unsigned int v2:31;
  float v3;
};
//SIG(1 C_BFu31i_F) C1{ Fc Fi:31 Fi}



static void Test_C_BFu31i_F()
{
  {
    init_simple_test("C_BFu31i_F");
    static STRUCT_IF_C C_BFu31i_F lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu31i_F)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i_F)");
    check_field_offset(lv, v1, 0, "C_BFu31i_F.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_F");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_F");
    check_field_offset(lv, v3, 8, "C_BFu31i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_F, C_BFu31i_F)
//============================================================================


struct  C_BFu31i_I  {
  char v1;
  unsigned int v2:31;
  int v3;
};
//SIG(1 C_BFu31i_I) C1{ Fc Fi:31 Fi}



static void Test_C_BFu31i_I()
{
  {
    init_simple_test("C_BFu31i_I");
    static STRUCT_IF_C C_BFu31i_I lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu31i_I)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i_I)");
    check_field_offset(lv, v1, 0, "C_BFu31i_I.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_I");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_I");
    check_field_offset(lv, v3, 8, "C_BFu31i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_I, C_BFu31i_I)
//============================================================================


struct  C_BFu31i_Ip  {
  char v1;
  unsigned int v2:31;
  int *v3;
};
//SIG(1 C_BFu31i_Ip) C1{ Fc Fi:31 Fp}



static void Test_C_BFu31i_Ip()
{
  {
    init_simple_test("C_BFu31i_Ip");
    static STRUCT_IF_C C_BFu31i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu31i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31i_Ip)");
    check_field_offset(lv, v1, 0, "C_BFu31i_Ip.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_Ip");
    check_field_offset(lv, v3, 8, "C_BFu31i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_Ip, C_BFu31i_Ip)
//============================================================================


struct  C_BFu31i_L  {
  char v1;
  unsigned int v2:31;
  __tsi64 v3;
};
//SIG(1 C_BFu31i_L) C1{ Fc Fi:31 FL}



static void Test_C_BFu31i_L()
{
  {
    init_simple_test("C_BFu31i_L");
    static STRUCT_IF_C C_BFu31i_L lv;
    check2(sizeof(lv), 16, "sizeof(C_BFu31i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31i_L)");
    check_field_offset(lv, v1, 0, "C_BFu31i_L.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_L");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_L");
    check_field_offset(lv, v3, 8, "C_BFu31i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_L, C_BFu31i_L)
//============================================================================


struct  C_BFu31i_S  {
  char v1;
  unsigned int v2:31;
  short v3;
};
//SIG(1 C_BFu31i_S) C1{ Fc Fi:31 Fs}



static void Test_C_BFu31i_S()
{
  {
    init_simple_test("C_BFu31i_S");
    static STRUCT_IF_C C_BFu31i_S lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu31i_S)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i_S)");
    check_field_offset(lv, v1, 0, "C_BFu31i_S.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_S");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_S");
    check_field_offset(lv, v3, 8, "C_BFu31i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_S, C_BFu31i_S)
//============================================================================


struct  C_BFu31i_Uc  {
  char v1;
  unsigned int v2:31;
  unsigned char v3;
};
//SIG(1 C_BFu31i_Uc) C1{ Fc Fi:31 Fc}



static void Test_C_BFu31i_Uc()
{
  {
    init_simple_test("C_BFu31i_Uc");
    static STRUCT_IF_C C_BFu31i_Uc lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu31i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i_Uc)");
    check_field_offset(lv, v1, 0, "C_BFu31i_Uc.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_Uc");
    check_field_offset(lv, v3, 8, "C_BFu31i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_Uc, C_BFu31i_Uc)
//============================================================================


struct  C_BFu31i_Ui  {
  char v1;
  unsigned int v2:31;
  unsigned int v3;
};
//SIG(1 C_BFu31i_Ui) C1{ Fc Fi:31 Fi}



static void Test_C_BFu31i_Ui()
{
  {
    init_simple_test("C_BFu31i_Ui");
    static STRUCT_IF_C C_BFu31i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu31i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i_Ui)");
    check_field_offset(lv, v1, 0, "C_BFu31i_Ui.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_Ui");
    check_field_offset(lv, v3, 8, "C_BFu31i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_Ui, C_BFu31i_Ui)
//============================================================================


struct  C_BFu31i_Ul  {
  char v1;
  unsigned int v2:31;
  __tsu64 v3;
};
//SIG(1 C_BFu31i_Ul) C1{ Fc Fi:31 FL}



static void Test_C_BFu31i_Ul()
{
  {
    init_simple_test("C_BFu31i_Ul");
    static STRUCT_IF_C C_BFu31i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(C_BFu31i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31i_Ul)");
    check_field_offset(lv, v1, 0, "C_BFu31i_Ul.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_Ul");
    check_field_offset(lv, v3, 8, "C_BFu31i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_Ul, C_BFu31i_Ul)
//============================================================================


struct  C_BFu31i_Us  {
  char v1;
  unsigned int v2:31;
  unsigned short v3;
};
//SIG(1 C_BFu31i_Us) C1{ Fc Fi:31 Fs}



static void Test_C_BFu31i_Us()
{
  {
    init_simple_test("C_BFu31i_Us");
    static STRUCT_IF_C C_BFu31i_Us lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu31i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i_Us)");
    check_field_offset(lv, v1, 0, "C_BFu31i_Us.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_Us");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_Us");
    check_field_offset(lv, v3, 8, "C_BFu31i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_Us, C_BFu31i_Us)
//============================================================================


struct  C_BFu31i_Vp  {
  char v1;
  unsigned int v2:31;
  void *v3;
};
//SIG(1 C_BFu31i_Vp) C1{ Fc Fi:31 Fp}



static void Test_C_BFu31i_Vp()
{
  {
    init_simple_test("C_BFu31i_Vp");
    static STRUCT_IF_C C_BFu31i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu31i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31i_Vp)");
    check_field_offset(lv, v1, 0, "C_BFu31i_Vp.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_Vp");
    check_field_offset(lv, v3, 8, "C_BFu31i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_Vp, C_BFu31i_Vp)
//============================================================================


struct  C_BFu31ll  {
  char v1;
  __tsu64 v2:31;
};
//SIG(1 C_BFu31ll) C1{ Fc FL:31}



static void Test_C_BFu31ll()
{
  {
    init_simple_test("C_BFu31ll");
    static STRUCT_IF_C C_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll)");
    check_field_offset(lv, v1, 0, "C_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll, C_BFu31ll)
//============================================================================


struct  C_BFu31ll_BFu15i  {
  char v1;
  __tsu64 v2:31;
  unsigned int v3:15;
};
//SIG(1 C_BFu31ll_BFu15i) C1{ Fc FL:31 Fi:15}



static void Test_C_BFu31ll_BFu15i()
{
  {
    init_simple_test("C_BFu31ll_BFu15i");
    static STRUCT_IF_C C_BFu31ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu15i)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 7, 15, 1, "C_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 7, 15, hide_ull(1LL<<14), "C_BFu31ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu15i, C_BFu31ll_BFu15i)
//============================================================================


struct  C_BFu31ll_BFu15ll  {
  char v1;
  __tsu64 v2:31;
  __tsu64 v3:15;
};
//SIG(1 C_BFu31ll_BFu15ll) C1{ Fc FL:31 FL:15}



static void Test_C_BFu31ll_BFu15ll()
{
  {
    init_simple_test("C_BFu31ll_BFu15ll");
    static STRUCT_IF_C C_BFu31ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 7, 15, 1, "C_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 7, 15, hide_ull(1LL<<14), "C_BFu31ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu15ll, C_BFu31ll_BFu15ll)
//============================================================================


struct  C_BFu31ll_BFu15s  {
  char v1;
  __tsu64 v2:31;
  unsigned short v3:15;
};
//SIG(1 C_BFu31ll_BFu15s) C1{ Fc FL:31 Fs:15}



static void Test_C_BFu31ll_BFu15s()
{
  {
    init_simple_test("C_BFu31ll_BFu15s");
    static STRUCT_IF_C C_BFu31ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu15s)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "C_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "C_BFu31ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu15s, C_BFu31ll_BFu15s)
//============================================================================


struct  C_BFu31ll_BFu16i  {
  char v1;
  __tsu64 v2:31;
  unsigned int v3:16;
};
//SIG(1 C_BFu31ll_BFu16i) C1{ Fc FL:31 Fi:16}



static void Test_C_BFu31ll_BFu16i()
{
  {
    init_simple_test("C_BFu31ll_BFu16i");
    static STRUCT_IF_C C_BFu31ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu16i)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 7, 16, 1, "C_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 7, 16, hide_ull(1LL<<15), "C_BFu31ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu16i, C_BFu31ll_BFu16i)
//============================================================================


struct  C_BFu31ll_BFu16ll  {
  char v1;
  __tsu64 v2:31;
  __tsu64 v3:16;
};
//SIG(1 C_BFu31ll_BFu16ll) C1{ Fc FL:31 FL:16}



static void Test_C_BFu31ll_BFu16ll()
{
  {
    init_simple_test("C_BFu31ll_BFu16ll");
    static STRUCT_IF_C C_BFu31ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 7, 16, 1, "C_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 7, 16, hide_ull(1LL<<15), "C_BFu31ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu16ll, C_BFu31ll_BFu16ll)
//============================================================================


struct  C_BFu31ll_BFu16s  {
  char v1;
  __tsu64 v2:31;
  unsigned short v3:16;
};
//SIG(1 C_BFu31ll_BFu16s) C1{ Fc FL:31 Fs:16}



static void Test_C_BFu31ll_BFu16s()
{
  {
    init_simple_test("C_BFu31ll_BFu16s");
    static STRUCT_IF_C C_BFu31ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu16s)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "C_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "C_BFu31ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu16s, C_BFu31ll_BFu16s)
//============================================================================


struct  C_BFu31ll_BFu17i  {
  char v1;
  __tsu64 v2:31;
  unsigned int v3:17;
};
//SIG(1 C_BFu31ll_BFu17i) C1{ Fc FL:31 Fi:17}



static void Test_C_BFu31ll_BFu17i()
{
  {
    init_simple_test("C_BFu31ll_BFu17i");
    static STRUCT_IF_C C_BFu31ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu17i)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 7, 17, 1, "C_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 7, 17, hide_ull(1LL<<16), "C_BFu31ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu17i, C_BFu31ll_BFu17i)
//============================================================================


struct  C_BFu31ll_BFu17ll  {
  char v1;
  __tsu64 v2:31;
  __tsu64 v3:17;
};
//SIG(1 C_BFu31ll_BFu17ll) C1{ Fc FL:31 FL:17}



static void Test_C_BFu31ll_BFu17ll()
{
  {
    init_simple_test("C_BFu31ll_BFu17ll");
    static STRUCT_IF_C C_BFu31ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 7, 17, 1, "C_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 7, 17, hide_ull(1LL<<16), "C_BFu31ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu17ll, C_BFu31ll_BFu17ll)
//============================================================================


struct  C_BFu31ll_BFu1c  {
  char v1;
  __tsu64 v2:31;
  unsigned char v3:1;
};
//SIG(1 C_BFu31ll_BFu1c) C1{ Fc FL:31 Fc:1}



static void Test_C_BFu31ll_BFu1c()
{
  {
    init_simple_test("C_BFu31ll_BFu1c");
    static STRUCT_IF_C C_BFu31ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu1c)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu1c");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "C_BFu31ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu1c, C_BFu31ll_BFu1c)
//============================================================================


struct  C_BFu31ll_BFu1i  {
  char v1;
  __tsu64 v2:31;
  unsigned int v3:1;
};
//SIG(1 C_BFu31ll_BFu1i) C1{ Fc FL:31 Fi:1}



static void Test_C_BFu31ll_BFu1i()
{
  {
    init_simple_test("C_BFu31ll_BFu1i");
    static STRUCT_IF_C C_BFu31ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu1i)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu1i");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "C_BFu31ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu1i, C_BFu31ll_BFu1i)
//============================================================================


struct  C_BFu31ll_BFu1ll  {
  char v1;
  __tsu64 v2:31;
  __tsu64 v3:1;
};
//SIG(1 C_BFu31ll_BFu1ll) C1{ Fc FL:31 FL:1}



static void Test_C_BFu31ll_BFu1ll()
{
  {
    init_simple_test("C_BFu31ll_BFu1ll");
    static STRUCT_IF_C C_BFu31ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "C_BFu31ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu1ll, C_BFu31ll_BFu1ll)
//============================================================================


struct  C_BFu31ll_BFu1s  {
  char v1;
  __tsu64 v2:31;
  unsigned short v3:1;
};
//SIG(1 C_BFu31ll_BFu1s) C1{ Fc FL:31 Fs:1}



static void Test_C_BFu31ll_BFu1s()
{
  {
    init_simple_test("C_BFu31ll_BFu1s");
    static STRUCT_IF_C C_BFu31ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu1s)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu1s");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "C_BFu31ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu1s, C_BFu31ll_BFu1s)
//============================================================================


struct  C_BFu31ll_BFu31i  {
  char v1;
  __tsu64 v2:31;
  unsigned int v3:31;
};
//SIG(1 C_BFu31ll_BFu31i) C1{ Fc FL:31 Fi:31}



static void Test_C_BFu31ll_BFu31i()
{
  {
    init_simple_test("C_BFu31ll_BFu31i");
    static STRUCT_IF_C C_BFu31ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu31i)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "C_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu31i, C_BFu31ll_BFu31i)
//============================================================================


struct  C_BFu31ll_BFu31ll  {
  char v1;
  __tsu64 v2:31;
  __tsu64 v3:31;
};
//SIG(1 C_BFu31ll_BFu31ll) C1{ Fc FL:31 FL:31}



static void Test_C_BFu31ll_BFu31ll()
{
  {
    init_simple_test("C_BFu31ll_BFu31ll");
    static STRUCT_IF_C C_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 31, 1, "C_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 31, hide_ull(1LL<<30), "C_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu31ll, C_BFu31ll_BFu31ll)
//============================================================================


struct  C_BFu31ll_BFu32i  {
  char v1;
  __tsu64 v2:31;
  unsigned int v3:32;
};
//SIG(1 C_BFu31ll_BFu32i) C1{ Fc FL:31 Fi:32}



static void Test_C_BFu31ll_BFu32i()
{
  {
    init_simple_test("C_BFu31ll_BFu32i");
    static STRUCT_IF_C C_BFu31ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu31ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu32i)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "C_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "C_BFu31ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu32i, C_BFu31ll_BFu32i)
//============================================================================


struct  C_BFu31ll_BFu32ll  {
  char v1;
  __tsu64 v2:31;
  __tsu64 v3:32;
};
//SIG(1 C_BFu31ll_BFu32ll) C1{ Fc FL:31 FL:32}



static void Test_C_BFu31ll_BFu32ll()
{
  {
    init_simple_test("C_BFu31ll_BFu32ll");
    static STRUCT_IF_C C_BFu31ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu31ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 32, 1, "C_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 32, hide_ull(1LL<<31), "C_BFu31ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu32ll, C_BFu31ll_BFu32ll)
//============================================================================


struct  C_BFu31ll_BFu33  {
  char v1;
  __tsu64 v2:31;
  __tsu64 v3:33;
};
//SIG(1 C_BFu31ll_BFu33) C1{ Fc FL:31 FL:33}



static void Test_C_BFu31ll_BFu33()
{
  {
    init_simple_test("C_BFu31ll_BFu33");
    static STRUCT_IF_C C_BFu31ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu31ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu33)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 33, 1, "C_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 33, hide_ull(1LL<<32), "C_BFu31ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu33, C_BFu31ll_BFu33)
//============================================================================


struct  C_BFu31ll_BFu7c  {
  char v1;
  __tsu64 v2:31;
  unsigned char v3:7;
};
//SIG(1 C_BFu31ll_BFu7c) C1{ Fc FL:31 Fc:7}



static void Test_C_BFu31ll_BFu7c()
{
  {
    init_simple_test("C_BFu31ll_BFu7c");
    static STRUCT_IF_C C_BFu31ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu7c)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "C_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "C_BFu31ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu7c, C_BFu31ll_BFu7c)
//============================================================================


struct  C_BFu31ll_BFu7i  {
  char v1;
  __tsu64 v2:31;
  unsigned int v3:7;
};
//SIG(1 C_BFu31ll_BFu7i) C1{ Fc FL:31 Fi:7}



static void Test_C_BFu31ll_BFu7i()
{
  {
    init_simple_test("C_BFu31ll_BFu7i");
    static STRUCT_IF_C C_BFu31ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu7i)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "C_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "C_BFu31ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu7i, C_BFu31ll_BFu7i)
//============================================================================


struct  C_BFu31ll_BFu7ll  {
  char v1;
  __tsu64 v2:31;
  __tsu64 v3:7;
};
//SIG(1 C_BFu31ll_BFu7ll) C1{ Fc FL:31 FL:7}



static void Test_C_BFu31ll_BFu7ll()
{
  {
    init_simple_test("C_BFu31ll_BFu7ll");
    static STRUCT_IF_C C_BFu31ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "C_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "C_BFu31ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu7ll, C_BFu31ll_BFu7ll)
//============================================================================


struct  C_BFu31ll_BFu7s  {
  char v1;
  __tsu64 v2:31;
  unsigned short v3:7;
};
//SIG(1 C_BFu31ll_BFu7s) C1{ Fc FL:31 Fs:7}



static void Test_C_BFu31ll_BFu7s()
{
  {
    init_simple_test("C_BFu31ll_BFu7s");
    static STRUCT_IF_C C_BFu31ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu7s)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "C_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "C_BFu31ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu7s, C_BFu31ll_BFu7s)
//============================================================================


struct  C_BFu31ll_BFu8c  {
  char v1;
  __tsu64 v2:31;
  unsigned char v3:8;
};
//SIG(1 C_BFu31ll_BFu8c) C1{ Fc FL:31 Fc:8}



static void Test_C_BFu31ll_BFu8c()
{
  {
    init_simple_test("C_BFu31ll_BFu8c");
    static STRUCT_IF_C C_BFu31ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu8c)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "C_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "C_BFu31ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu8c, C_BFu31ll_BFu8c)
//============================================================================


struct  C_BFu31ll_BFu8i  {
  char v1;
  __tsu64 v2:31;
  unsigned int v3:8;
};
//SIG(1 C_BFu31ll_BFu8i) C1{ Fc FL:31 Fi:8}



static void Test_C_BFu31ll_BFu8i()
{
  {
    init_simple_test("C_BFu31ll_BFu8i");
    static STRUCT_IF_C C_BFu31ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu8i)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "C_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "C_BFu31ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu8i, C_BFu31ll_BFu8i)
//============================================================================


struct  C_BFu31ll_BFu8ll  {
  char v1;
  __tsu64 v2:31;
  __tsu64 v3:8;
};
//SIG(1 C_BFu31ll_BFu8ll) C1{ Fc FL:31 FL:8}



static void Test_C_BFu31ll_BFu8ll()
{
  {
    init_simple_test("C_BFu31ll_BFu8ll");
    static STRUCT_IF_C C_BFu31ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "C_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "C_BFu31ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu8ll, C_BFu31ll_BFu8ll)
//============================================================================


struct  C_BFu31ll_BFu8s  {
  char v1;
  __tsu64 v2:31;
  unsigned short v3:8;
};
//SIG(1 C_BFu31ll_BFu8s) C1{ Fc FL:31 Fs:8}



static void Test_C_BFu31ll_BFu8s()
{
  {
    init_simple_test("C_BFu31ll_BFu8s");
    static STRUCT_IF_C C_BFu31ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu8s)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "C_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "C_BFu31ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu8s, C_BFu31ll_BFu8s)
//============================================================================


struct  C_BFu31ll_BFu9i  {
  char v1;
  __tsu64 v2:31;
  unsigned int v3:9;
};
//SIG(1 C_BFu31ll_BFu9i) C1{ Fc FL:31 Fi:9}



static void Test_C_BFu31ll_BFu9i()
{
  {
    init_simple_test("C_BFu31ll_BFu9i");
    static STRUCT_IF_C C_BFu31ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu9i)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "C_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "C_BFu31ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu9i, C_BFu31ll_BFu9i)
//============================================================================


struct  C_BFu31ll_BFu9ll  {
  char v1;
  __tsu64 v2:31;
  __tsu64 v3:9;
};
//SIG(1 C_BFu31ll_BFu9ll) C1{ Fc FL:31 FL:9}



static void Test_C_BFu31ll_BFu9ll()
{
  {
    init_simple_test("C_BFu31ll_BFu9ll");
    static STRUCT_IF_C C_BFu31ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "C_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "C_BFu31ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu9ll, C_BFu31ll_BFu9ll)
//============================================================================


struct  C_BFu31ll_BFu9s  {
  char v1;
  __tsu64 v2:31;
  unsigned short v3:9;
};
//SIG(1 C_BFu31ll_BFu9s) C1{ Fc FL:31 Fs:9}



static void Test_C_BFu31ll_BFu9s()
{
  {
    init_simple_test("C_BFu31ll_BFu9s");
    static STRUCT_IF_C C_BFu31ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu9s)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "C_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "C_BFu31ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu9s, C_BFu31ll_BFu9s)
//============================================================================


struct  C_BFu31ll_C  {
  char v1;
  __tsu64 v2:31;
  char v3;
};
//SIG(1 C_BFu31ll_C) C1{ Fc FL:31 Fc}



static void Test_C_BFu31ll_C()
{
  {
    init_simple_test("C_BFu31ll_C");
    static STRUCT_IF_C C_BFu31ll_C lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_C)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_C");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_C");
    check_field_offset(lv, v3, 5, "C_BFu31ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_C, C_BFu31ll_C)
//============================================================================


struct  C_BFu31ll_D  {
  char v1;
  __tsu64 v2:31;
  double v3;
};
//SIG(1 C_BFu31ll_D) C1{ Fc FL:31 FL}



static void Test_C_BFu31ll_D()
{
  {
    init_simple_test("C_BFu31ll_D");
    static STRUCT_IF_C C_BFu31ll_D lv;
    check2(sizeof(lv), 16, "sizeof(C_BFu31ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_D)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_D");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_D");
    check_field_offset(lv, v3, 8, "C_BFu31ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_D, C_BFu31ll_D)
//============================================================================


struct  C_BFu31ll_F  {
  char v1;
  __tsu64 v2:31;
  float v3;
};
//SIG(1 C_BFu31ll_F) C1{ Fc FL:31 Fi}



static void Test_C_BFu31ll_F()
{
  {
    init_simple_test("C_BFu31ll_F");
    static STRUCT_IF_C C_BFu31ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu31ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_F)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_F");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_F");
    check_field_offset(lv, v3, 8, "C_BFu31ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_F, C_BFu31ll_F)
//============================================================================


struct  C_BFu31ll_I  {
  char v1;
  __tsu64 v2:31;
  int v3;
};
//SIG(1 C_BFu31ll_I) C1{ Fc FL:31 Fi}



static void Test_C_BFu31ll_I()
{
  {
    init_simple_test("C_BFu31ll_I");
    static STRUCT_IF_C C_BFu31ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu31ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_I)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_I");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_I");
    check_field_offset(lv, v3, 8, "C_BFu31ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_I, C_BFu31ll_I)
//============================================================================


struct  C_BFu31ll_Ip  {
  char v1;
  __tsu64 v2:31;
  int *v3;
};
//SIG(1 C_BFu31ll_Ip) C1{ Fc FL:31 Fp}



static void Test_C_BFu31ll_Ip()
{
  {
    init_simple_test("C_BFu31ll_Ip");
    static STRUCT_IF_C C_BFu31ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu31ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_Ip)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_Ip");
    check_field_offset(lv, v3, 8, "C_BFu31ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_Ip, C_BFu31ll_Ip)
//============================================================================


struct  C_BFu31ll_L  {
  char v1;
  __tsu64 v2:31;
  __tsi64 v3;
};
//SIG(1 C_BFu31ll_L) C1{ Fc FL:31 FL}



static void Test_C_BFu31ll_L()
{
  {
    init_simple_test("C_BFu31ll_L");
    static STRUCT_IF_C C_BFu31ll_L lv;
    check2(sizeof(lv), 16, "sizeof(C_BFu31ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_L)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_L");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_L");
    check_field_offset(lv, v3, 8, "C_BFu31ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_L, C_BFu31ll_L)
//============================================================================


struct  C_BFu31ll_S  {
  char v1;
  __tsu64 v2:31;
  short v3;
};
//SIG(1 C_BFu31ll_S) C1{ Fc FL:31 Fs}



static void Test_C_BFu31ll_S()
{
  {
    init_simple_test("C_BFu31ll_S");
    static STRUCT_IF_C C_BFu31ll_S lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_S)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_S");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_S");
    check_field_offset(lv, v3, 6, "C_BFu31ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_S, C_BFu31ll_S)
//============================================================================


struct  C_BFu31ll_Uc  {
  char v1;
  __tsu64 v2:31;
  unsigned char v3;
};
//SIG(1 C_BFu31ll_Uc) C1{ Fc FL:31 Fc}



static void Test_C_BFu31ll_Uc()
{
  {
    init_simple_test("C_BFu31ll_Uc");
    static STRUCT_IF_C C_BFu31ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_Uc)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_Uc");
    check_field_offset(lv, v3, 5, "C_BFu31ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_Uc, C_BFu31ll_Uc)
//============================================================================


struct  C_BFu31ll_Ui  {
  char v1;
  __tsu64 v2:31;
  unsigned int v3;
};
//SIG(1 C_BFu31ll_Ui) C1{ Fc FL:31 Fi}



static void Test_C_BFu31ll_Ui()
{
  {
    init_simple_test("C_BFu31ll_Ui");
    static STRUCT_IF_C C_BFu31ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu31ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_Ui)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_Ui");
    check_field_offset(lv, v3, 8, "C_BFu31ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_Ui, C_BFu31ll_Ui)
//============================================================================


struct  C_BFu31ll_Ul  {
  char v1;
  __tsu64 v2:31;
  __tsu64 v3;
};
//SIG(1 C_BFu31ll_Ul) C1{ Fc FL:31 FL}



static void Test_C_BFu31ll_Ul()
{
  {
    init_simple_test("C_BFu31ll_Ul");
    static STRUCT_IF_C C_BFu31ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(C_BFu31ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_Ul)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_Ul");
    check_field_offset(lv, v3, 8, "C_BFu31ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_Ul, C_BFu31ll_Ul)
//============================================================================


struct  C_BFu31ll_Us  {
  char v1;
  __tsu64 v2:31;
  unsigned short v3;
};
//SIG(1 C_BFu31ll_Us) C1{ Fc FL:31 Fs}



static void Test_C_BFu31ll_Us()
{
  {
    init_simple_test("C_BFu31ll_Us");
    static STRUCT_IF_C C_BFu31ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_Us)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_Us");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_Us");
    check_field_offset(lv, v3, 6, "C_BFu31ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_Us, C_BFu31ll_Us)
//============================================================================


struct  C_BFu31ll_Vp  {
  char v1;
  __tsu64 v2:31;
  void *v3;
};
//SIG(1 C_BFu31ll_Vp) C1{ Fc FL:31 Fp}



static void Test_C_BFu31ll_Vp()
{
  {
    init_simple_test("C_BFu31ll_Vp");
    static STRUCT_IF_C C_BFu31ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu31ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_Vp)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_Vp");
    check_field_offset(lv, v3, 8, "C_BFu31ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_Vp, C_BFu31ll_Vp)
//============================================================================


struct  C_BFu32i  {
  char v1;
  unsigned int v2:32;
};
//SIG(1 C_BFu32i) C1{ Fc Fi:32}



static void Test_C_BFu32i()
{
  {
    init_simple_test("C_BFu32i");
    static STRUCT_IF_C C_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i)");
    check_field_offset(lv, v1, 0, "C_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i, C_BFu32i)
//============================================================================


struct  C_BFu32i_BFu15i  {
  char v1;
  unsigned int v2:32;
  unsigned int v3:15;
};
//SIG(1 C_BFu32i_BFu15i) C1{ Fc Fi:32 Fi:15}



static void Test_C_BFu32i_BFu15i()
{
  {
    init_simple_test("C_BFu32i_BFu15i");
    static STRUCT_IF_C C_BFu32i_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu32i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i_BFu15i)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu15i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "C_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "C_BFu32i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu15i, C_BFu32i_BFu15i)
//============================================================================


struct  C_BFu32i_BFu15ll  {
  char v1;
  unsigned int v2:32;
  __tsu64 v3:15;
};
//SIG(1 C_BFu32i_BFu15ll) C1{ Fc Fi:32 FL:15}



static void Test_C_BFu32i_BFu15ll()
{
  {
    init_simple_test("C_BFu32i_BFu15ll");
    static STRUCT_IF_C C_BFu32i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu32i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32i_BFu15ll)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "C_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "C_BFu32i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu15ll, C_BFu32i_BFu15ll)
//============================================================================


struct  C_BFu32i_BFu15s  {
  char v1;
  unsigned int v2:32;
  unsigned short v3:15;
};
//SIG(1 C_BFu32i_BFu15s) C1{ Fc Fi:32 Fs:15}



static void Test_C_BFu32i_BFu15s()
{
  {
    init_simple_test("C_BFu32i_BFu15s");
    static STRUCT_IF_C C_BFu32i_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu32i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i_BFu15s)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu15s.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "C_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "C_BFu32i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu15s, C_BFu32i_BFu15s)
//============================================================================


struct  C_BFu32i_BFu16i  {
  char v1;
  unsigned int v2:32;
  unsigned int v3:16;
};
//SIG(1 C_BFu32i_BFu16i) C1{ Fc Fi:32 Fi:16}



static void Test_C_BFu32i_BFu16i()
{
  {
    init_simple_test("C_BFu32i_BFu16i");
    static STRUCT_IF_C C_BFu32i_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu32i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i_BFu16i)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu16i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "C_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "C_BFu32i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu16i, C_BFu32i_BFu16i)
//============================================================================


struct  C_BFu32i_BFu16ll  {
  char v1;
  unsigned int v2:32;
  __tsu64 v3:16;
};
//SIG(1 C_BFu32i_BFu16ll) C1{ Fc Fi:32 FL:16}



static void Test_C_BFu32i_BFu16ll()
{
  {
    init_simple_test("C_BFu32i_BFu16ll");
    static STRUCT_IF_C C_BFu32i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu32i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32i_BFu16ll)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "C_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "C_BFu32i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu16ll, C_BFu32i_BFu16ll)
//============================================================================


struct  C_BFu32i_BFu16s  {
  char v1;
  unsigned int v2:32;
  unsigned short v3:16;
};
//SIG(1 C_BFu32i_BFu16s) C1{ Fc Fi:32 Fs:16}



static void Test_C_BFu32i_BFu16s()
{
  {
    init_simple_test("C_BFu32i_BFu16s");
    static STRUCT_IF_C C_BFu32i_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu32i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i_BFu16s)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu16s.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "C_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "C_BFu32i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu16s, C_BFu32i_BFu16s)
//============================================================================


struct  C_BFu32i_BFu17i  {
  char v1;
  unsigned int v2:32;
  unsigned int v3:17;
};
//SIG(1 C_BFu32i_BFu17i) C1{ Fc Fi:32 Fi:17}



static void Test_C_BFu32i_BFu17i()
{
  {
    init_simple_test("C_BFu32i_BFu17i");
    static STRUCT_IF_C C_BFu32i_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu32i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i_BFu17i)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "C_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "C_BFu32i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu17i, C_BFu32i_BFu17i)
//============================================================================


struct  C_BFu32i_BFu17ll  {
  char v1;
  unsigned int v2:32;
  __tsu64 v3:17;
};
//SIG(1 C_BFu32i_BFu17ll) C1{ Fc Fi:32 FL:17}



static void Test_C_BFu32i_BFu17ll()
{
  {
    init_simple_test("C_BFu32i_BFu17ll");
    static STRUCT_IF_C C_BFu32i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu32i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32i_BFu17ll)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "C_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "C_BFu32i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu17ll, C_BFu32i_BFu17ll)
//============================================================================


struct  C_BFu32i_BFu1c  {
  char v1;
  unsigned int v2:32;
  unsigned char v3:1;
};
//SIG(1 C_BFu32i_BFu1c) C1{ Fc Fi:32 Fc:1}



static void Test_C_BFu32i_BFu1c()
{
  {
    init_simple_test("C_BFu32i_BFu1c");
    static STRUCT_IF_C C_BFu32i_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu32i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i_BFu1c)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu1c");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "C_BFu32i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu1c, C_BFu32i_BFu1c)
//============================================================================


struct  C_BFu32i_BFu1i  {
  char v1;
  unsigned int v2:32;
  unsigned int v3:1;
};
//SIG(1 C_BFu32i_BFu1i) C1{ Fc Fi:32 Fi:1}



static void Test_C_BFu32i_BFu1i()
{
  {
    init_simple_test("C_BFu32i_BFu1i");
    static STRUCT_IF_C C_BFu32i_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu32i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i_BFu1i)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu1i");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "C_BFu32i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu1i, C_BFu32i_BFu1i)
//============================================================================


struct  C_BFu32i_BFu1ll  {
  char v1;
  unsigned int v2:32;
  __tsu64 v3:1;
};
//SIG(1 C_BFu32i_BFu1ll) C1{ Fc Fi:32 FL:1}



static void Test_C_BFu32i_BFu1ll()
{
  {
    init_simple_test("C_BFu32i_BFu1ll");
    static STRUCT_IF_C C_BFu32i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu32i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32i_BFu1ll)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu1ll");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "C_BFu32i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu1ll, C_BFu32i_BFu1ll)
//============================================================================


struct  C_BFu32i_BFu1s  {
  char v1;
  unsigned int v2:32;
  unsigned short v3:1;
};
//SIG(1 C_BFu32i_BFu1s) C1{ Fc Fi:32 Fs:1}



static void Test_C_BFu32i_BFu1s()
{
  {
    init_simple_test("C_BFu32i_BFu1s");
    static STRUCT_IF_C C_BFu32i_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu32i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i_BFu1s)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu1s");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "C_BFu32i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu1s, C_BFu32i_BFu1s)
//============================================================================


struct  C_BFu32i_BFu31i  {
  char v1;
  unsigned int v2:32;
  unsigned int v3:31;
};
//SIG(1 C_BFu32i_BFu31i) C1{ Fc Fi:32 Fi:31}



static void Test_C_BFu32i_BFu31i()
{
  {
    init_simple_test("C_BFu32i_BFu31i");
    static STRUCT_IF_C C_BFu32i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu32i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i_BFu31i)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "C_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "C_BFu32i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu31i, C_BFu32i_BFu31i)
//============================================================================


struct  C_BFu32i_BFu31ll  {
  char v1;
  unsigned int v2:32;
  __tsu64 v3:31;
};
//SIG(1 C_BFu32i_BFu31ll) C1{ Fc Fi:32 FL:31}



static void Test_C_BFu32i_BFu31ll()
{
  {
    init_simple_test("C_BFu32i_BFu31ll");
    static STRUCT_IF_C C_BFu32i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu32i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32i_BFu31ll)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "C_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "C_BFu32i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu31ll, C_BFu32i_BFu31ll)
//============================================================================


struct  C_BFu32i_BFu32i  {
  char v1;
  unsigned int v2:32;
  unsigned int v3:32;
};
//SIG(1 C_BFu32i_BFu32i) C1{ Fc Fi:32 Fi:32}



static void Test_C_BFu32i_BFu32i()
{
  {
    init_simple_test("C_BFu32i_BFu32i");
    static STRUCT_IF_C C_BFu32i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu32i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i_BFu32i)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "C_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu32i, C_BFu32i_BFu32i)
//============================================================================


struct  C_BFu32i_BFu32ll  {
  char v1;
  unsigned int v2:32;
  __tsu64 v3:32;
};
//SIG(1 C_BFu32i_BFu32ll) C1{ Fc Fi:32 FL:32}



static void Test_C_BFu32i_BFu32ll()
{
  {
    init_simple_test("C_BFu32i_BFu32ll");
    static STRUCT_IF_C C_BFu32i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32i_BFu32ll)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "C_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu32ll, C_BFu32i_BFu32ll)
//============================================================================


struct  C_BFu32i_BFu33  {
  char v1;
  unsigned int v2:32;
  __tsu64 v3:33;
};
//SIG(1 C_BFu32i_BFu33) C1{ Fc Fi:32 FL:33}



static void Test_C_BFu32i_BFu33()
{
  {
    init_simple_test("C_BFu32i_BFu33");
    static STRUCT_IF_C C_BFu32i_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(C_BFu32i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32i_BFu33)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu33.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "C_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "C_BFu32i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu33, C_BFu32i_BFu33)
//============================================================================


struct  C_BFu32i_BFu7c  {
  char v1;
  unsigned int v2:32;
  unsigned char v3:7;
};
//SIG(1 C_BFu32i_BFu7c) C1{ Fc Fi:32 Fc:7}



static void Test_C_BFu32i_BFu7c()
{
  {
    init_simple_test("C_BFu32i_BFu7c");
    static STRUCT_IF_C C_BFu32i_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu32i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i_BFu7c)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu7c.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "C_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "C_BFu32i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu7c, C_BFu32i_BFu7c)
//============================================================================


struct  C_BFu32i_BFu7i  {
  char v1;
  unsigned int v2:32;
  unsigned int v3:7;
};
//SIG(1 C_BFu32i_BFu7i) C1{ Fc Fi:32 Fi:7}



static void Test_C_BFu32i_BFu7i()
{
  {
    init_simple_test("C_BFu32i_BFu7i");
    static STRUCT_IF_C C_BFu32i_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu32i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i_BFu7i)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu7i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "C_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "C_BFu32i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu7i, C_BFu32i_BFu7i)
//============================================================================


struct  C_BFu32i_BFu7ll  {
  char v1;
  unsigned int v2:32;
  __tsu64 v3:7;
};
//SIG(1 C_BFu32i_BFu7ll) C1{ Fc Fi:32 FL:7}



static void Test_C_BFu32i_BFu7ll()
{
  {
    init_simple_test("C_BFu32i_BFu7ll");
    static STRUCT_IF_C C_BFu32i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu32i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32i_BFu7ll)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "C_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "C_BFu32i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu7ll, C_BFu32i_BFu7ll)
//============================================================================


struct  C_BFu32i_BFu7s  {
  char v1;
  unsigned int v2:32;
  unsigned short v3:7;
};
//SIG(1 C_BFu32i_BFu7s) C1{ Fc Fi:32 Fs:7}



static void Test_C_BFu32i_BFu7s()
{
  {
    init_simple_test("C_BFu32i_BFu7s");
    static STRUCT_IF_C C_BFu32i_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu32i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i_BFu7s)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu7s.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "C_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "C_BFu32i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu7s, C_BFu32i_BFu7s)
//============================================================================


struct  C_BFu32i_BFu8c  {
  char v1;
  unsigned int v2:32;
  unsigned char v3:8;
};
//SIG(1 C_BFu32i_BFu8c) C1{ Fc Fi:32 Fc:8}



static void Test_C_BFu32i_BFu8c()
{
  {
    init_simple_test("C_BFu32i_BFu8c");
    static STRUCT_IF_C C_BFu32i_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu32i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i_BFu8c)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu8c.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "C_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "C_BFu32i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu8c, C_BFu32i_BFu8c)
//============================================================================


struct  C_BFu32i_BFu8i  {
  char v1;
  unsigned int v2:32;
  unsigned int v3:8;
};
//SIG(1 C_BFu32i_BFu8i) C1{ Fc Fi:32 Fi:8}



static void Test_C_BFu32i_BFu8i()
{
  {
    init_simple_test("C_BFu32i_BFu8i");
    static STRUCT_IF_C C_BFu32i_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu32i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i_BFu8i)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu8i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "C_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "C_BFu32i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu8i, C_BFu32i_BFu8i)
//============================================================================


struct  C_BFu32i_BFu8ll  {
  char v1;
  unsigned int v2:32;
  __tsu64 v3:8;
};
//SIG(1 C_BFu32i_BFu8ll) C1{ Fc Fi:32 FL:8}



static void Test_C_BFu32i_BFu8ll()
{
  {
    init_simple_test("C_BFu32i_BFu8ll");
    static STRUCT_IF_C C_BFu32i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu32i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32i_BFu8ll)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "C_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "C_BFu32i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu8ll, C_BFu32i_BFu8ll)
//============================================================================


struct  C_BFu32i_BFu8s  {
  char v1;
  unsigned int v2:32;
  unsigned short v3:8;
};
//SIG(1 C_BFu32i_BFu8s) C1{ Fc Fi:32 Fs:8}



static void Test_C_BFu32i_BFu8s()
{
  {
    init_simple_test("C_BFu32i_BFu8s");
    static STRUCT_IF_C C_BFu32i_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu32i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i_BFu8s)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu8s.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "C_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "C_BFu32i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu8s, C_BFu32i_BFu8s)
//============================================================================


struct  C_BFu32i_BFu9i  {
  char v1;
  unsigned int v2:32;
  unsigned int v3:9;
};
//SIG(1 C_BFu32i_BFu9i) C1{ Fc Fi:32 Fi:9}



static void Test_C_BFu32i_BFu9i()
{
  {
    init_simple_test("C_BFu32i_BFu9i");
    static STRUCT_IF_C C_BFu32i_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu32i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i_BFu9i)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu9i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "C_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "C_BFu32i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu9i, C_BFu32i_BFu9i)
//============================================================================


struct  C_BFu32i_BFu9ll  {
  char v1;
  unsigned int v2:32;
  __tsu64 v3:9;
};
//SIG(1 C_BFu32i_BFu9ll) C1{ Fc Fi:32 FL:9}



static void Test_C_BFu32i_BFu9ll()
{
  {
    init_simple_test("C_BFu32i_BFu9ll");
    static STRUCT_IF_C C_BFu32i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu32i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32i_BFu9ll)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "C_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "C_BFu32i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu9ll, C_BFu32i_BFu9ll)
//============================================================================


struct  C_BFu32i_BFu9s  {
  char v1;
  unsigned int v2:32;
  unsigned short v3:9;
};
//SIG(1 C_BFu32i_BFu9s) C1{ Fc Fi:32 Fs:9}



static void Test_C_BFu32i_BFu9s()
{
  {
    init_simple_test("C_BFu32i_BFu9s");
    static STRUCT_IF_C C_BFu32i_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu32i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i_BFu9s)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu9s.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "C_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "C_BFu32i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu9s, C_BFu32i_BFu9s)
//============================================================================


struct  C_BFu32i_C  {
  char v1;
  unsigned int v2:32;
  char v3;
};
//SIG(1 C_BFu32i_C) C1{ Fc Fi:32 Fc}



static void Test_C_BFu32i_C()
{
  {
    init_simple_test("C_BFu32i_C");
    static STRUCT_IF_C C_BFu32i_C lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu32i_C)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i_C)");
    check_field_offset(lv, v1, 0, "C_BFu32i_C.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_C");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_C");
    check_field_offset(lv, v3, 8, "C_BFu32i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_C, C_BFu32i_C)
//============================================================================


struct  C_BFu32i_D  {
  char v1;
  unsigned int v2:32;
  double v3;
};
//SIG(1 C_BFu32i_D) C1{ Fc Fi:32 FL}



static void Test_C_BFu32i_D()
{
  {
    init_simple_test("C_BFu32i_D");
    static STRUCT_IF_C C_BFu32i_D lv;
    check2(sizeof(lv), 16, "sizeof(C_BFu32i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32i_D)");
    check_field_offset(lv, v1, 0, "C_BFu32i_D.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_D");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_D");
    check_field_offset(lv, v3, 8, "C_BFu32i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_D, C_BFu32i_D)
//============================================================================


struct  C_BFu32i_F  {
  char v1;
  unsigned int v2:32;
  float v3;
};
//SIG(1 C_BFu32i_F) C1{ Fc Fi:32 Fi}



static void Test_C_BFu32i_F()
{
  {
    init_simple_test("C_BFu32i_F");
    static STRUCT_IF_C C_BFu32i_F lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu32i_F)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i_F)");
    check_field_offset(lv, v1, 0, "C_BFu32i_F.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_F");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_F");
    check_field_offset(lv, v3, 8, "C_BFu32i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_F, C_BFu32i_F)
//============================================================================


struct  C_BFu32i_I  {
  char v1;
  unsigned int v2:32;
  int v3;
};
//SIG(1 C_BFu32i_I) C1{ Fc Fi:32 Fi}



static void Test_C_BFu32i_I()
{
  {
    init_simple_test("C_BFu32i_I");
    static STRUCT_IF_C C_BFu32i_I lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu32i_I)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i_I)");
    check_field_offset(lv, v1, 0, "C_BFu32i_I.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_I");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_I");
    check_field_offset(lv, v3, 8, "C_BFu32i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_I, C_BFu32i_I)
//============================================================================


struct  C_BFu32i_Ip  {
  char v1;
  unsigned int v2:32;
  int *v3;
};
//SIG(1 C_BFu32i_Ip) C1{ Fc Fi:32 Fp}



static void Test_C_BFu32i_Ip()
{
  {
    init_simple_test("C_BFu32i_Ip");
    static STRUCT_IF_C C_BFu32i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu32i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32i_Ip)");
    check_field_offset(lv, v1, 0, "C_BFu32i_Ip.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_Ip");
    check_field_offset(lv, v3, 8, "C_BFu32i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_Ip, C_BFu32i_Ip)
//============================================================================


struct  C_BFu32i_L  {
  char v1;
  unsigned int v2:32;
  __tsi64 v3;
};
//SIG(1 C_BFu32i_L) C1{ Fc Fi:32 FL}



static void Test_C_BFu32i_L()
{
  {
    init_simple_test("C_BFu32i_L");
    static STRUCT_IF_C C_BFu32i_L lv;
    check2(sizeof(lv), 16, "sizeof(C_BFu32i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32i_L)");
    check_field_offset(lv, v1, 0, "C_BFu32i_L.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_L");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_L");
    check_field_offset(lv, v3, 8, "C_BFu32i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_L, C_BFu32i_L)
//============================================================================


struct  C_BFu32i_S  {
  char v1;
  unsigned int v2:32;
  short v3;
};
//SIG(1 C_BFu32i_S) C1{ Fc Fi:32 Fs}



static void Test_C_BFu32i_S()
{
  {
    init_simple_test("C_BFu32i_S");
    static STRUCT_IF_C C_BFu32i_S lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu32i_S)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i_S)");
    check_field_offset(lv, v1, 0, "C_BFu32i_S.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_S");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_S");
    check_field_offset(lv, v3, 8, "C_BFu32i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_S, C_BFu32i_S)
//============================================================================


struct  C_BFu32i_Uc  {
  char v1;
  unsigned int v2:32;
  unsigned char v3;
};
//SIG(1 C_BFu32i_Uc) C1{ Fc Fi:32 Fc}



static void Test_C_BFu32i_Uc()
{
  {
    init_simple_test("C_BFu32i_Uc");
    static STRUCT_IF_C C_BFu32i_Uc lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu32i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i_Uc)");
    check_field_offset(lv, v1, 0, "C_BFu32i_Uc.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_Uc");
    check_field_offset(lv, v3, 8, "C_BFu32i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_Uc, C_BFu32i_Uc)
//============================================================================


struct  C_BFu32i_Ui  {
  char v1;
  unsigned int v2:32;
  unsigned int v3;
};
//SIG(1 C_BFu32i_Ui) C1{ Fc Fi:32 Fi}



static void Test_C_BFu32i_Ui()
{
  {
    init_simple_test("C_BFu32i_Ui");
    static STRUCT_IF_C C_BFu32i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu32i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i_Ui)");
    check_field_offset(lv, v1, 0, "C_BFu32i_Ui.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_Ui");
    check_field_offset(lv, v3, 8, "C_BFu32i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_Ui, C_BFu32i_Ui)
//============================================================================


struct  C_BFu32i_Ul  {
  char v1;
  unsigned int v2:32;
  __tsu64 v3;
};
//SIG(1 C_BFu32i_Ul) C1{ Fc Fi:32 FL}



static void Test_C_BFu32i_Ul()
{
  {
    init_simple_test("C_BFu32i_Ul");
    static STRUCT_IF_C C_BFu32i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(C_BFu32i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32i_Ul)");
    check_field_offset(lv, v1, 0, "C_BFu32i_Ul.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_Ul");
    check_field_offset(lv, v3, 8, "C_BFu32i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_Ul, C_BFu32i_Ul)
//============================================================================


struct  C_BFu32i_Us  {
  char v1;
  unsigned int v2:32;
  unsigned short v3;
};
//SIG(1 C_BFu32i_Us) C1{ Fc Fi:32 Fs}



static void Test_C_BFu32i_Us()
{
  {
    init_simple_test("C_BFu32i_Us");
    static STRUCT_IF_C C_BFu32i_Us lv;
    check2(sizeof(lv), 12, "sizeof(C_BFu32i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i_Us)");
    check_field_offset(lv, v1, 0, "C_BFu32i_Us.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_Us");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_Us");
    check_field_offset(lv, v3, 8, "C_BFu32i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_Us, C_BFu32i_Us)
//============================================================================


struct  C_BFu32i_Vp  {
  char v1;
  unsigned int v2:32;
  void *v3;
};
//SIG(1 C_BFu32i_Vp) C1{ Fc Fi:32 Fp}



static void Test_C_BFu32i_Vp()
{
  {
    init_simple_test("C_BFu32i_Vp");
    static STRUCT_IF_C C_BFu32i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu32i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32i_Vp)");
    check_field_offset(lv, v1, 0, "C_BFu32i_Vp.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_Vp");
    check_field_offset(lv, v3, 8, "C_BFu32i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_Vp, C_BFu32i_Vp)
//============================================================================


struct  C_BFu32ll  {
  char v1;
  __tsu64 v2:32;
};
//SIG(1 C_BFu32ll) C1{ Fc FL:32}



static void Test_C_BFu32ll()
{
  {
    init_simple_test("C_BFu32ll");
    static STRUCT_IF_C C_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll)");
    check_field_offset(lv, v1, 0, "C_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll, C_BFu32ll)
//============================================================================


struct  C_BFu32ll_BFu15i  {
  char v1;
  __tsu64 v2:32;
  unsigned int v3:15;
};
//SIG(1 C_BFu32ll_BFu15i) C1{ Fc FL:32 Fi:15}



static void Test_C_BFu32ll_BFu15i()
{
  {
    init_simple_test("C_BFu32ll_BFu15i");
    static STRUCT_IF_C C_BFu32ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu15i)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "C_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "C_BFu32ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu15i, C_BFu32ll_BFu15i)
//============================================================================


struct  C_BFu32ll_BFu15ll  {
  char v1;
  __tsu64 v2:32;
  __tsu64 v3:15;
};
//SIG(1 C_BFu32ll_BFu15ll) C1{ Fc FL:32 FL:15}



static void Test_C_BFu32ll_BFu15ll()
{
  {
    init_simple_test("C_BFu32ll_BFu15ll");
    static STRUCT_IF_C C_BFu32ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "C_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "C_BFu32ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu15ll, C_BFu32ll_BFu15ll)
//============================================================================


struct  C_BFu32ll_BFu15s  {
  char v1;
  __tsu64 v2:32;
  unsigned short v3:15;
};
//SIG(1 C_BFu32ll_BFu15s) C1{ Fc FL:32 Fs:15}



static void Test_C_BFu32ll_BFu15s()
{
  {
    init_simple_test("C_BFu32ll_BFu15s");
    static STRUCT_IF_C C_BFu32ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu15s)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "C_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "C_BFu32ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu15s, C_BFu32ll_BFu15s)
//============================================================================


struct  C_BFu32ll_BFu16i  {
  char v1;
  __tsu64 v2:32;
  unsigned int v3:16;
};
//SIG(1 C_BFu32ll_BFu16i) C1{ Fc FL:32 Fi:16}



static void Test_C_BFu32ll_BFu16i()
{
  {
    init_simple_test("C_BFu32ll_BFu16i");
    static STRUCT_IF_C C_BFu32ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu16i)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "C_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "C_BFu32ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu16i, C_BFu32ll_BFu16i)
//============================================================================


struct  C_BFu32ll_BFu16ll  {
  char v1;
  __tsu64 v2:32;
  __tsu64 v3:16;
};
//SIG(1 C_BFu32ll_BFu16ll) C1{ Fc FL:32 FL:16}



static void Test_C_BFu32ll_BFu16ll()
{
  {
    init_simple_test("C_BFu32ll_BFu16ll");
    static STRUCT_IF_C C_BFu32ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "C_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "C_BFu32ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu16ll, C_BFu32ll_BFu16ll)
//============================================================================


struct  C_BFu32ll_BFu16s  {
  char v1;
  __tsu64 v2:32;
  unsigned short v3:16;
};
//SIG(1 C_BFu32ll_BFu16s) C1{ Fc FL:32 Fs:16}



static void Test_C_BFu32ll_BFu16s()
{
  {
    init_simple_test("C_BFu32ll_BFu16s");
    static STRUCT_IF_C C_BFu32ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu16s)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "C_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "C_BFu32ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu16s, C_BFu32ll_BFu16s)
//============================================================================


struct  C_BFu32ll_BFu17i  {
  char v1;
  __tsu64 v2:32;
  unsigned int v3:17;
};
//SIG(1 C_BFu32ll_BFu17i) C1{ Fc FL:32 Fi:17}



static void Test_C_BFu32ll_BFu17i()
{
  {
    init_simple_test("C_BFu32ll_BFu17i");
    static STRUCT_IF_C C_BFu32ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu17i)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "C_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "C_BFu32ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu17i, C_BFu32ll_BFu17i)
//============================================================================


struct  C_BFu32ll_BFu17ll  {
  char v1;
  __tsu64 v2:32;
  __tsu64 v3:17;
};
//SIG(1 C_BFu32ll_BFu17ll) C1{ Fc FL:32 FL:17}



static void Test_C_BFu32ll_BFu17ll()
{
  {
    init_simple_test("C_BFu32ll_BFu17ll");
    static STRUCT_IF_C C_BFu32ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "C_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "C_BFu32ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu17ll, C_BFu32ll_BFu17ll)
//============================================================================


struct  C_BFu32ll_BFu1c  {
  char v1;
  __tsu64 v2:32;
  unsigned char v3:1;
};
//SIG(1 C_BFu32ll_BFu1c) C1{ Fc FL:32 Fc:1}



static void Test_C_BFu32ll_BFu1c()
{
  {
    init_simple_test("C_BFu32ll_BFu1c");
    static STRUCT_IF_C C_BFu32ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu1c)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu1c");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "C_BFu32ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu1c, C_BFu32ll_BFu1c)
//============================================================================


struct  C_BFu32ll_BFu1i  {
  char v1;
  __tsu64 v2:32;
  unsigned int v3:1;
};
//SIG(1 C_BFu32ll_BFu1i) C1{ Fc FL:32 Fi:1}



static void Test_C_BFu32ll_BFu1i()
{
  {
    init_simple_test("C_BFu32ll_BFu1i");
    static STRUCT_IF_C C_BFu32ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu1i)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu1i");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "C_BFu32ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu1i, C_BFu32ll_BFu1i)
//============================================================================


struct  C_BFu32ll_BFu1ll  {
  char v1;
  __tsu64 v2:32;
  __tsu64 v3:1;
};
//SIG(1 C_BFu32ll_BFu1ll) C1{ Fc FL:32 FL:1}



static void Test_C_BFu32ll_BFu1ll()
{
  {
    init_simple_test("C_BFu32ll_BFu1ll");
    static STRUCT_IF_C C_BFu32ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "C_BFu32ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu1ll, C_BFu32ll_BFu1ll)
//============================================================================


struct  C_BFu32ll_BFu1s  {
  char v1;
  __tsu64 v2:32;
  unsigned short v3:1;
};
//SIG(1 C_BFu32ll_BFu1s) C1{ Fc FL:32 Fs:1}



static void Test_C_BFu32ll_BFu1s()
{
  {
    init_simple_test("C_BFu32ll_BFu1s");
    static STRUCT_IF_C C_BFu32ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu1s)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu1s");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "C_BFu32ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu1s, C_BFu32ll_BFu1s)
//============================================================================


struct  C_BFu32ll_BFu31i  {
  char v1;
  __tsu64 v2:32;
  unsigned int v3:31;
};
//SIG(1 C_BFu32ll_BFu31i) C1{ Fc FL:32 Fi:31}



static void Test_C_BFu32ll_BFu31i()
{
  {
    init_simple_test("C_BFu32ll_BFu31i");
    static STRUCT_IF_C C_BFu32ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu32ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu31i)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "C_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "C_BFu32ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu31i, C_BFu32ll_BFu31i)
//============================================================================


struct  C_BFu32ll_BFu31ll  {
  char v1;
  __tsu64 v2:32;
  __tsu64 v3:31;
};
//SIG(1 C_BFu32ll_BFu31ll) C1{ Fc FL:32 FL:31}



static void Test_C_BFu32ll_BFu31ll()
{
  {
    init_simple_test("C_BFu32ll_BFu31ll");
    static STRUCT_IF_C C_BFu32ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu32ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, 1, "C_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, hide_ull(1LL<<30), "C_BFu32ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu31ll, C_BFu32ll_BFu31ll)
//============================================================================


struct  C_BFu32ll_BFu32i  {
  char v1;
  __tsu64 v2:32;
  unsigned int v3:32;
};
//SIG(1 C_BFu32ll_BFu32i) C1{ Fc FL:32 Fi:32}



static void Test_C_BFu32ll_BFu32i()
{
  {
    init_simple_test("C_BFu32ll_BFu32i");
    static STRUCT_IF_C C_BFu32ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu32i)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "C_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu32i, C_BFu32ll_BFu32i)
//============================================================================


struct  C_BFu32ll_BFu32ll  {
  char v1;
  __tsu64 v2:32;
  __tsu64 v3:32;
};
//SIG(1 C_BFu32ll_BFu32ll) C1{ Fc FL:32 FL:32}



static void Test_C_BFu32ll_BFu32ll()
{
  {
    init_simple_test("C_BFu32ll_BFu32ll");
    static STRUCT_IF_C C_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, 1, "C_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu32ll, C_BFu32ll_BFu32ll)
//============================================================================


struct  C_BFu32ll_BFu33  {
  char v1;
  __tsu64 v2:32;
  __tsu64 v3:33;
};
//SIG(1 C_BFu32ll_BFu33) C1{ Fc FL:32 FL:33}



static void Test_C_BFu32ll_BFu33()
{
  {
    init_simple_test("C_BFu32ll_BFu33");
    static STRUCT_IF_C C_BFu32ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu32ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu33)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, 1, "C_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, hide_ull(1LL<<32), "C_BFu32ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu33, C_BFu32ll_BFu33)
//============================================================================


struct  C_BFu32ll_BFu7c  {
  char v1;
  __tsu64 v2:32;
  unsigned char v3:7;
};
//SIG(1 C_BFu32ll_BFu7c) C1{ Fc FL:32 Fc:7}



static void Test_C_BFu32ll_BFu7c()
{
  {
    init_simple_test("C_BFu32ll_BFu7c");
    static STRUCT_IF_C C_BFu32ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu7c)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "C_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "C_BFu32ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu7c, C_BFu32ll_BFu7c)
//============================================================================


struct  C_BFu32ll_BFu7i  {
  char v1;
  __tsu64 v2:32;
  unsigned int v3:7;
};
//SIG(1 C_BFu32ll_BFu7i) C1{ Fc FL:32 Fi:7}



static void Test_C_BFu32ll_BFu7i()
{
  {
    init_simple_test("C_BFu32ll_BFu7i");
    static STRUCT_IF_C C_BFu32ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu7i)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "C_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "C_BFu32ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu7i, C_BFu32ll_BFu7i)
//============================================================================


struct  C_BFu32ll_BFu7ll  {
  char v1;
  __tsu64 v2:32;
  __tsu64 v3:7;
};
//SIG(1 C_BFu32ll_BFu7ll) C1{ Fc FL:32 FL:7}



static void Test_C_BFu32ll_BFu7ll()
{
  {
    init_simple_test("C_BFu32ll_BFu7ll");
    static STRUCT_IF_C C_BFu32ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "C_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "C_BFu32ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu7ll, C_BFu32ll_BFu7ll)
//============================================================================


struct  C_BFu32ll_BFu7s  {
  char v1;
  __tsu64 v2:32;
  unsigned short v3:7;
};
//SIG(1 C_BFu32ll_BFu7s) C1{ Fc FL:32 Fs:7}



static void Test_C_BFu32ll_BFu7s()
{
  {
    init_simple_test("C_BFu32ll_BFu7s");
    static STRUCT_IF_C C_BFu32ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu7s)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "C_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "C_BFu32ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu7s, C_BFu32ll_BFu7s)
//============================================================================


struct  C_BFu32ll_BFu8c  {
  char v1;
  __tsu64 v2:32;
  unsigned char v3:8;
};
//SIG(1 C_BFu32ll_BFu8c) C1{ Fc FL:32 Fc:8}



static void Test_C_BFu32ll_BFu8c()
{
  {
    init_simple_test("C_BFu32ll_BFu8c");
    static STRUCT_IF_C C_BFu32ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu8c)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "C_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "C_BFu32ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu8c, C_BFu32ll_BFu8c)
//============================================================================


struct  C_BFu32ll_BFu8i  {
  char v1;
  __tsu64 v2:32;
  unsigned int v3:8;
};
//SIG(1 C_BFu32ll_BFu8i) C1{ Fc FL:32 Fi:8}



static void Test_C_BFu32ll_BFu8i()
{
  {
    init_simple_test("C_BFu32ll_BFu8i");
    static STRUCT_IF_C C_BFu32ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu8i)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "C_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "C_BFu32ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu8i, C_BFu32ll_BFu8i)
//============================================================================


struct  C_BFu32ll_BFu8ll  {
  char v1;
  __tsu64 v2:32;
  __tsu64 v3:8;
};
//SIG(1 C_BFu32ll_BFu8ll) C1{ Fc FL:32 FL:8}



static void Test_C_BFu32ll_BFu8ll()
{
  {
    init_simple_test("C_BFu32ll_BFu8ll");
    static STRUCT_IF_C C_BFu32ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "C_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "C_BFu32ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu8ll, C_BFu32ll_BFu8ll)
//============================================================================


struct  C_BFu32ll_BFu8s  {
  char v1;
  __tsu64 v2:32;
  unsigned short v3:8;
};
//SIG(1 C_BFu32ll_BFu8s) C1{ Fc FL:32 Fs:8}



static void Test_C_BFu32ll_BFu8s()
{
  {
    init_simple_test("C_BFu32ll_BFu8s");
    static STRUCT_IF_C C_BFu32ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu8s)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "C_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "C_BFu32ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu8s, C_BFu32ll_BFu8s)
//============================================================================


struct  C_BFu32ll_BFu9i  {
  char v1;
  __tsu64 v2:32;
  unsigned int v3:9;
};
//SIG(1 C_BFu32ll_BFu9i) C1{ Fc FL:32 Fi:9}



static void Test_C_BFu32ll_BFu9i()
{
  {
    init_simple_test("C_BFu32ll_BFu9i");
    static STRUCT_IF_C C_BFu32ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu9i)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "C_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "C_BFu32ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu9i, C_BFu32ll_BFu9i)
//============================================================================


struct  C_BFu32ll_BFu9ll  {
  char v1;
  __tsu64 v2:32;
  __tsu64 v3:9;
};
//SIG(1 C_BFu32ll_BFu9ll) C1{ Fc FL:32 FL:9}



static void Test_C_BFu32ll_BFu9ll()
{
  {
    init_simple_test("C_BFu32ll_BFu9ll");
    static STRUCT_IF_C C_BFu32ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "C_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "C_BFu32ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu9ll, C_BFu32ll_BFu9ll)
//============================================================================


struct  C_BFu32ll_BFu9s  {
  char v1;
  __tsu64 v2:32;
  unsigned short v3:9;
};
//SIG(1 C_BFu32ll_BFu9s) C1{ Fc FL:32 Fs:9}



static void Test_C_BFu32ll_BFu9s()
{
  {
    init_simple_test("C_BFu32ll_BFu9s");
    static STRUCT_IF_C C_BFu32ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu9s)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "C_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "C_BFu32ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu9s, C_BFu32ll_BFu9s)
//============================================================================


struct  C_BFu32ll_C  {
  char v1;
  __tsu64 v2:32;
  char v3;
};
//SIG(1 C_BFu32ll_C) C1{ Fc FL:32 Fc}



static void Test_C_BFu32ll_C()
{
  {
    init_simple_test("C_BFu32ll_C");
    static STRUCT_IF_C C_BFu32ll_C lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_C)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_C");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_C");
    check_field_offset(lv, v3, 5, "C_BFu32ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_C, C_BFu32ll_C)
//============================================================================


struct  C_BFu32ll_D  {
  char v1;
  __tsu64 v2:32;
  double v3;
};
//SIG(1 C_BFu32ll_D) C1{ Fc FL:32 FL}



static void Test_C_BFu32ll_D()
{
  {
    init_simple_test("C_BFu32ll_D");
    static STRUCT_IF_C C_BFu32ll_D lv;
    check2(sizeof(lv), 16, "sizeof(C_BFu32ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_D)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_D");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_D");
    check_field_offset(lv, v3, 8, "C_BFu32ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_D, C_BFu32ll_D)
//============================================================================


struct  C_BFu32ll_F  {
  char v1;
  __tsu64 v2:32;
  float v3;
};
//SIG(1 C_BFu32ll_F) C1{ Fc FL:32 Fi}



static void Test_C_BFu32ll_F()
{
  {
    init_simple_test("C_BFu32ll_F");
    static STRUCT_IF_C C_BFu32ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu32ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_F)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_F");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_F");
    check_field_offset(lv, v3, 8, "C_BFu32ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_F, C_BFu32ll_F)
//============================================================================


struct  C_BFu32ll_I  {
  char v1;
  __tsu64 v2:32;
  int v3;
};
//SIG(1 C_BFu32ll_I) C1{ Fc FL:32 Fi}



static void Test_C_BFu32ll_I()
{
  {
    init_simple_test("C_BFu32ll_I");
    static STRUCT_IF_C C_BFu32ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu32ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_I)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_I");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_I");
    check_field_offset(lv, v3, 8, "C_BFu32ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_I, C_BFu32ll_I)
//============================================================================


struct  C_BFu32ll_Ip  {
  char v1;
  __tsu64 v2:32;
  int *v3;
};
//SIG(1 C_BFu32ll_Ip) C1{ Fc FL:32 Fp}



static void Test_C_BFu32ll_Ip()
{
  {
    init_simple_test("C_BFu32ll_Ip");
    static STRUCT_IF_C C_BFu32ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu32ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_Ip)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_Ip");
    check_field_offset(lv, v3, 8, "C_BFu32ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_Ip, C_BFu32ll_Ip)
//============================================================================


struct  C_BFu32ll_L  {
  char v1;
  __tsu64 v2:32;
  __tsi64 v3;
};
//SIG(1 C_BFu32ll_L) C1{ Fc FL:32 FL}



static void Test_C_BFu32ll_L()
{
  {
    init_simple_test("C_BFu32ll_L");
    static STRUCT_IF_C C_BFu32ll_L lv;
    check2(sizeof(lv), 16, "sizeof(C_BFu32ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_L)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_L");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_L");
    check_field_offset(lv, v3, 8, "C_BFu32ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_L, C_BFu32ll_L)
//============================================================================


struct  C_BFu32ll_S  {
  char v1;
  __tsu64 v2:32;
  short v3;
};
//SIG(1 C_BFu32ll_S) C1{ Fc FL:32 Fs}



static void Test_C_BFu32ll_S()
{
  {
    init_simple_test("C_BFu32ll_S");
    static STRUCT_IF_C C_BFu32ll_S lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_S)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_S");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_S");
    check_field_offset(lv, v3, 6, "C_BFu32ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_S, C_BFu32ll_S)
//============================================================================


struct  C_BFu32ll_Uc  {
  char v1;
  __tsu64 v2:32;
  unsigned char v3;
};
//SIG(1 C_BFu32ll_Uc) C1{ Fc FL:32 Fc}



static void Test_C_BFu32ll_Uc()
{
  {
    init_simple_test("C_BFu32ll_Uc");
    static STRUCT_IF_C C_BFu32ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_Uc)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_Uc");
    check_field_offset(lv, v3, 5, "C_BFu32ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_Uc, C_BFu32ll_Uc)
//============================================================================


struct  C_BFu32ll_Ui  {
  char v1;
  __tsu64 v2:32;
  unsigned int v3;
};
//SIG(1 C_BFu32ll_Ui) C1{ Fc FL:32 Fi}



static void Test_C_BFu32ll_Ui()
{
  {
    init_simple_test("C_BFu32ll_Ui");
    static STRUCT_IF_C C_BFu32ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu32ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_Ui)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_Ui");
    check_field_offset(lv, v3, 8, "C_BFu32ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_Ui, C_BFu32ll_Ui)
//============================================================================


struct  C_BFu32ll_Ul  {
  char v1;
  __tsu64 v2:32;
  __tsu64 v3;
};
//SIG(1 C_BFu32ll_Ul) C1{ Fc FL:32 FL}



static void Test_C_BFu32ll_Ul()
{
  {
    init_simple_test("C_BFu32ll_Ul");
    static STRUCT_IF_C C_BFu32ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(C_BFu32ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_Ul)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_Ul");
    check_field_offset(lv, v3, 8, "C_BFu32ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_Ul, C_BFu32ll_Ul)
//============================================================================


struct  C_BFu32ll_Us  {
  char v1;
  __tsu64 v2:32;
  unsigned short v3;
};
//SIG(1 C_BFu32ll_Us) C1{ Fc FL:32 Fs}



static void Test_C_BFu32ll_Us()
{
  {
    init_simple_test("C_BFu32ll_Us");
    static STRUCT_IF_C C_BFu32ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_Us)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_Us");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_Us");
    check_field_offset(lv, v3, 6, "C_BFu32ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_Us, C_BFu32ll_Us)
//============================================================================


struct  C_BFu32ll_Vp  {
  char v1;
  __tsu64 v2:32;
  void *v3;
};
//SIG(1 C_BFu32ll_Vp) C1{ Fc FL:32 Fp}



static void Test_C_BFu32ll_Vp()
{
  {
    init_simple_test("C_BFu32ll_Vp");
    static STRUCT_IF_C C_BFu32ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu32ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_Vp)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_Vp");
    check_field_offset(lv, v3, 8, "C_BFu32ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_Vp, C_BFu32ll_Vp)
//============================================================================


struct  C_BFu33  {
  char v1;
  __tsu64 v2:33;
};
//SIG(1 C_BFu33) C1{ Fc FL:33}



static void Test_C_BFu33()
{
  {
    init_simple_test("C_BFu33");
    static STRUCT_IF_C C_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33)");
    check_field_offset(lv, v1, 0, "C_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33, C_BFu33)
//============================================================================


struct  C_BFu33_BFu15i  {
  char v1;
  __tsu64 v2:33;
  unsigned int v3:15;
};
//SIG(1 C_BFu33_BFu15i) C1{ Fc FL:33 Fi:15}



static void Test_C_BFu33_BFu15i()
{
  {
    init_simple_test("C_BFu33_BFu15i");
    static STRUCT_IF_C C_BFu33_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu33_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu15i)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 5, 1, 15, 1, "C_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 5, 1, 15, hide_ull(1LL<<14), "C_BFu33_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu15i, C_BFu33_BFu15i)
//============================================================================


struct  C_BFu33_BFu15ll  {
  char v1;
  __tsu64 v2:33;
  __tsu64 v3:15;
};
//SIG(1 C_BFu33_BFu15ll) C1{ Fc FL:33 FL:15}



static void Test_C_BFu33_BFu15ll()
{
  {
    init_simple_test("C_BFu33_BFu15ll");
    static STRUCT_IF_C C_BFu33_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu33_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu15ll)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, 5, 1, 15, 1, "C_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, 5, 1, 15, hide_ull(1LL<<14), "C_BFu33_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu15ll, C_BFu33_BFu15ll)
//============================================================================


struct  C_BFu33_BFu15s  {
  char v1;
  __tsu64 v2:33;
  unsigned short v3:15;
};
//SIG(1 C_BFu33_BFu15s) C1{ Fc FL:33 Fs:15}



static void Test_C_BFu33_BFu15s()
{
  {
    init_simple_test("C_BFu33_BFu15s");
    static STRUCT_IF_C C_BFu33_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu33_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu15s)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "C_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "C_BFu33_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu15s, C_BFu33_BFu15s)
//============================================================================


struct  C_BFu33_BFu16i  {
  char v1;
  __tsu64 v2:33;
  unsigned int v3:16;
};
//SIG(1 C_BFu33_BFu16i) C1{ Fc FL:33 Fi:16}



static void Test_C_BFu33_BFu16i()
{
  {
    init_simple_test("C_BFu33_BFu16i");
    static STRUCT_IF_C C_BFu33_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu33_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu16i)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 5, 1, 16, 1, "C_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 5, 1, 16, hide_ull(1LL<<15), "C_BFu33_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu16i, C_BFu33_BFu16i)
//============================================================================


struct  C_BFu33_BFu16ll  {
  char v1;
  __tsu64 v2:33;
  __tsu64 v3:16;
};
//SIG(1 C_BFu33_BFu16ll) C1{ Fc FL:33 FL:16}



static void Test_C_BFu33_BFu16ll()
{
  {
    init_simple_test("C_BFu33_BFu16ll");
    static STRUCT_IF_C C_BFu33_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu33_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu16ll)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, 5, 1, 16, 1, "C_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, 5, 1, 16, hide_ull(1LL<<15), "C_BFu33_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu16ll, C_BFu33_BFu16ll)
//============================================================================


struct  C_BFu33_BFu16s  {
  char v1;
  __tsu64 v2:33;
  unsigned short v3:16;
};
//SIG(1 C_BFu33_BFu16s) C1{ Fc FL:33 Fs:16}



static void Test_C_BFu33_BFu16s()
{
  {
    init_simple_test("C_BFu33_BFu16s");
    static STRUCT_IF_C C_BFu33_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu33_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu16s)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "C_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "C_BFu33_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu16s, C_BFu33_BFu16s)
//============================================================================


struct  C_BFu33_BFu17i  {
  char v1;
  __tsu64 v2:33;
  unsigned int v3:17;
};
//SIG(1 C_BFu33_BFu17i) C1{ Fc FL:33 Fi:17}



static void Test_C_BFu33_BFu17i()
{
  {
    init_simple_test("C_BFu33_BFu17i");
    static STRUCT_IF_C C_BFu33_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu33_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu17i)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 5, 1, 17, 1, "C_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 5, 1, 17, hide_ull(1LL<<16), "C_BFu33_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu17i, C_BFu33_BFu17i)
//============================================================================


struct  C_BFu33_BFu17ll  {
  char v1;
  __tsu64 v2:33;
  __tsu64 v3:17;
};
//SIG(1 C_BFu33_BFu17ll) C1{ Fc FL:33 FL:17}



static void Test_C_BFu33_BFu17ll()
{
  {
    init_simple_test("C_BFu33_BFu17ll");
    static STRUCT_IF_C C_BFu33_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu33_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu17ll)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, 5, 1, 17, 1, "C_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, 5, 1, 17, hide_ull(1LL<<16), "C_BFu33_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu17ll, C_BFu33_BFu17ll)
//============================================================================


struct  C_BFu33_BFu1c  {
  char v1;
  __tsu64 v2:33;
  unsigned char v3:1;
};
//SIG(1 C_BFu33_BFu1c) C1{ Fc FL:33 Fc:1}



static void Test_C_BFu33_BFu1c()
{
  {
    init_simple_test("C_BFu33_BFu1c");
    static STRUCT_IF_C C_BFu33_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu33_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu1c)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu1c");
    set_bf_and_test(lv, v3, 5, 1, 1, 1, "C_BFu33_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu1c, C_BFu33_BFu1c)
//============================================================================


struct  C_BFu33_BFu1i  {
  char v1;
  __tsu64 v2:33;
  unsigned int v3:1;
};
//SIG(1 C_BFu33_BFu1i) C1{ Fc FL:33 Fi:1}



static void Test_C_BFu33_BFu1i()
{
  {
    init_simple_test("C_BFu33_BFu1i");
    static STRUCT_IF_C C_BFu33_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu33_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu1i)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu1i");
    set_bf_and_test(lv, v3, 5, 1, 1, 1, "C_BFu33_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu1i, C_BFu33_BFu1i)
//============================================================================


struct  C_BFu33_BFu1ll  {
  char v1;
  __tsu64 v2:33;
  __tsu64 v3:1;
};
//SIG(1 C_BFu33_BFu1ll) C1{ Fc FL:33 FL:1}



static void Test_C_BFu33_BFu1ll()
{
  {
    init_simple_test("C_BFu33_BFu1ll");
    static STRUCT_IF_C C_BFu33_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu33_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu1ll)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu1ll");
    set_bf_and_test(lv, v3, 5, 1, 1, 1, "C_BFu33_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu1ll, C_BFu33_BFu1ll)
//============================================================================


struct  C_BFu33_BFu1s  {
  char v1;
  __tsu64 v2:33;
  unsigned short v3:1;
};
//SIG(1 C_BFu33_BFu1s) C1{ Fc FL:33 Fs:1}



static void Test_C_BFu33_BFu1s()
{
  {
    init_simple_test("C_BFu33_BFu1s");
    static STRUCT_IF_C C_BFu33_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu33_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu1s)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu1s");
    set_bf_and_test(lv, v3, 5, 1, 1, 1, "C_BFu33_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu1s, C_BFu33_BFu1s)
//============================================================================


struct  C_BFu33_BFu31i  {
  char v1;
  __tsu64 v2:33;
  unsigned int v3:31;
};
//SIG(1 C_BFu33_BFu31i) C1{ Fc FL:33 Fi:31}



static void Test_C_BFu33_BFu31i()
{
  {
    init_simple_test("C_BFu33_BFu31i");
    static STRUCT_IF_C C_BFu33_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu33_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu31i)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "C_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "C_BFu33_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu31i, C_BFu33_BFu31i)
//============================================================================


struct  C_BFu33_BFu31ll  {
  char v1;
  __tsu64 v2:33;
  __tsu64 v3:31;
};
//SIG(1 C_BFu33_BFu31ll) C1{ Fc FL:33 FL:31}



static void Test_C_BFu33_BFu31ll()
{
  {
    init_simple_test("C_BFu33_BFu31ll");
    static STRUCT_IF_C C_BFu33_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu33_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu31ll)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 31, 1, "C_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 31, hide_ull(1LL<<30), "C_BFu33_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu31ll, C_BFu33_BFu31ll)
//============================================================================


struct  C_BFu33_BFu32i  {
  char v1;
  __tsu64 v2:33;
  unsigned int v3:32;
};
//SIG(1 C_BFu33_BFu32i) C1{ Fc FL:33 Fi:32}



static void Test_C_BFu33_BFu32i()
{
  {
    init_simple_test("C_BFu33_BFu32i");
    static STRUCT_IF_C C_BFu33_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu33_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu32i)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "C_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "C_BFu33_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu32i, C_BFu33_BFu32i)
//============================================================================


struct  C_BFu33_BFu32ll  {
  char v1;
  __tsu64 v2:33;
  __tsu64 v3:32;
};
//SIG(1 C_BFu33_BFu32ll) C1{ Fc FL:33 FL:32}



static void Test_C_BFu33_BFu32ll()
{
  {
    init_simple_test("C_BFu33_BFu32ll");
    static STRUCT_IF_C C_BFu33_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu33_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu32ll)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 32, 1, "C_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 32, hide_ull(1LL<<31), "C_BFu33_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu32ll, C_BFu33_BFu32ll)
//============================================================================


struct  C_BFu33_BFu33  {
  char v1;
  __tsu64 v2:33;
  __tsu64 v3:33;
};
//SIG(1 C_BFu33_BFu33) C1{ Fc FL:33 FL:33}



static void Test_C_BFu33_BFu33()
{
  {
    init_simple_test("C_BFu33_BFu33");
    static STRUCT_IF_C C_BFu33_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu33_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu33)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 33, 1, "C_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 33, hide_ull(1LL<<32), "C_BFu33_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu33, C_BFu33_BFu33)
//============================================================================


struct  C_BFu33_BFu7c  {
  char v1;
  __tsu64 v2:33;
  unsigned char v3:7;
};
//SIG(1 C_BFu33_BFu7c) C1{ Fc FL:33 Fc:7}



static void Test_C_BFu33_BFu7c()
{
  {
    init_simple_test("C_BFu33_BFu7c");
    static STRUCT_IF_C C_BFu33_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu33_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu7c)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 5, 1, 7, 1, "C_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 5, 1, 7, hide_ull(1LL<<6), "C_BFu33_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu7c, C_BFu33_BFu7c)
//============================================================================


struct  C_BFu33_BFu7i  {
  char v1;
  __tsu64 v2:33;
  unsigned int v3:7;
};
//SIG(1 C_BFu33_BFu7i) C1{ Fc FL:33 Fi:7}



static void Test_C_BFu33_BFu7i()
{
  {
    init_simple_test("C_BFu33_BFu7i");
    static STRUCT_IF_C C_BFu33_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu33_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu7i)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 5, 1, 7, 1, "C_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 5, 1, 7, hide_ull(1LL<<6), "C_BFu33_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu7i, C_BFu33_BFu7i)
//============================================================================


struct  C_BFu33_BFu7ll  {
  char v1;
  __tsu64 v2:33;
  __tsu64 v3:7;
};
//SIG(1 C_BFu33_BFu7ll) C1{ Fc FL:33 FL:7}



static void Test_C_BFu33_BFu7ll()
{
  {
    init_simple_test("C_BFu33_BFu7ll");
    static STRUCT_IF_C C_BFu33_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu33_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu7ll)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 5, 1, 7, 1, "C_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 5, 1, 7, hide_ull(1LL<<6), "C_BFu33_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu7ll, C_BFu33_BFu7ll)
//============================================================================


struct  C_BFu33_BFu7s  {
  char v1;
  __tsu64 v2:33;
  unsigned short v3:7;
};
//SIG(1 C_BFu33_BFu7s) C1{ Fc FL:33 Fs:7}



static void Test_C_BFu33_BFu7s()
{
  {
    init_simple_test("C_BFu33_BFu7s");
    static STRUCT_IF_C C_BFu33_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu33_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu7s)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 5, 1, 7, 1, "C_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 5, 1, 7, hide_ull(1LL<<6), "C_BFu33_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu7s, C_BFu33_BFu7s)
//============================================================================


struct  C_BFu33_BFu8c  {
  char v1;
  __tsu64 v2:33;
  unsigned char v3:8;
};
//SIG(1 C_BFu33_BFu8c) C1{ Fc FL:33 Fc:8}



static void Test_C_BFu33_BFu8c()
{
  {
    init_simple_test("C_BFu33_BFu8c");
    static STRUCT_IF_C C_BFu33_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu33_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu8c)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "C_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "C_BFu33_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu8c, C_BFu33_BFu8c)
//============================================================================


struct  C_BFu33_BFu8i  {
  char v1;
  __tsu64 v2:33;
  unsigned int v3:8;
};
//SIG(1 C_BFu33_BFu8i) C1{ Fc FL:33 Fi:8}



static void Test_C_BFu33_BFu8i()
{
  {
    init_simple_test("C_BFu33_BFu8i");
    static STRUCT_IF_C C_BFu33_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu33_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu8i)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 5, 1, 8, 1, "C_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 5, 1, 8, hide_ull(1LL<<7), "C_BFu33_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu8i, C_BFu33_BFu8i)
//============================================================================


struct  C_BFu33_BFu8ll  {
  char v1;
  __tsu64 v2:33;
  __tsu64 v3:8;
};
//SIG(1 C_BFu33_BFu8ll) C1{ Fc FL:33 FL:8}



static void Test_C_BFu33_BFu8ll()
{
  {
    init_simple_test("C_BFu33_BFu8ll");
    static STRUCT_IF_C C_BFu33_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu33_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu8ll)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 5, 1, 8, 1, "C_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 5, 1, 8, hide_ull(1LL<<7), "C_BFu33_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu8ll, C_BFu33_BFu8ll)
//============================================================================


struct  C_BFu33_BFu8s  {
  char v1;
  __tsu64 v2:33;
  unsigned short v3:8;
};
//SIG(1 C_BFu33_BFu8s) C1{ Fc FL:33 Fs:8}



static void Test_C_BFu33_BFu8s()
{
  {
    init_simple_test("C_BFu33_BFu8s");
    static STRUCT_IF_C C_BFu33_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu33_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu8s)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "C_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "C_BFu33_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu8s, C_BFu33_BFu8s)
//============================================================================


struct  C_BFu33_BFu9i  {
  char v1;
  __tsu64 v2:33;
  unsigned int v3:9;
};
//SIG(1 C_BFu33_BFu9i) C1{ Fc FL:33 Fi:9}



static void Test_C_BFu33_BFu9i()
{
  {
    init_simple_test("C_BFu33_BFu9i");
    static STRUCT_IF_C C_BFu33_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu33_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu9i)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 5, 1, 9, 1, "C_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 5, 1, 9, hide_ull(1LL<<8), "C_BFu33_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu9i, C_BFu33_BFu9i)
//============================================================================


struct  C_BFu33_BFu9ll  {
  char v1;
  __tsu64 v2:33;
  __tsu64 v3:9;
};
//SIG(1 C_BFu33_BFu9ll) C1{ Fc FL:33 FL:9}



static void Test_C_BFu33_BFu9ll()
{
  {
    init_simple_test("C_BFu33_BFu9ll");
    static STRUCT_IF_C C_BFu33_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu33_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu9ll)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 5, 1, 9, 1, "C_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 5, 1, 9, hide_ull(1LL<<8), "C_BFu33_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu9ll, C_BFu33_BFu9ll)
//============================================================================


struct  C_BFu33_BFu9s  {
  char v1;
  __tsu64 v2:33;
  unsigned short v3:9;
};
//SIG(1 C_BFu33_BFu9s) C1{ Fc FL:33 Fs:9}



static void Test_C_BFu33_BFu9s()
{
  {
    init_simple_test("C_BFu33_BFu9s");
    static STRUCT_IF_C C_BFu33_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu33_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu9s)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "C_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "C_BFu33_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu9s, C_BFu33_BFu9s)
//============================================================================

