// This file is distributed under the University of Illinois Open Source License.
// See LICENSE.TXT for details.
// 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  BFu1s_C_Uc  {
  unsigned short v1:1;
  char v2;
  unsigned char v3;
};
//SIG(1 BFu1s_C_Uc) C1{ Fs:1 Fc[2]}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu1s_D_BFu15s  {
  unsigned short v1:1;
  double v2;
  unsigned short v3:15;
};
//SIG(1 BFu1s_D_BFu15s) C1{ Fs:1 FL Fs:15}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu1s_D_BFu7s  {
  unsigned short v1:1;
  double v2;
  unsigned short v3:7;
};
//SIG(1 BFu1s_D_BFu7s) C1{ Fs:1 FL Fs:7}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu1s_F_BFu15i  {
  unsigned short v1:1;
  float v2;
  unsigned int v3:15;
};
//SIG(1 BFu1s_F_BFu15i) C1{ Fs:1 Fi Fi:15}



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


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



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


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



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


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



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


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



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


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



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


struct  BFu1s_F_BFu17i  {
  unsigned short v1:1;
  float v2;
  unsigned int v3:17;
};
//SIG(1 BFu1s_F_BFu17i) C1{ Fs:1 Fi Fi:17}



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


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



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


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



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


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



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


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



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


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



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


struct  BFu1s_F_BFu31i  {
  unsigned short v1:1;
  float v2;
  unsigned int v3:31;
};
//SIG(1 BFu1s_F_BFu31i) C1{ Fs:1 Fi Fi:31}



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


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



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


struct  BFu1s_F_BFu32i  {
  unsigned short v1:1;
  float v2;
  unsigned int v3:32;
};
//SIG(1 BFu1s_F_BFu32i) C1{ Fs:1 Fi Fi:32}



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


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



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


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



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


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



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


struct  BFu1s_F_BFu7i  {
  unsigned short v1:1;
  float v2;
  unsigned int v3:7;
};
//SIG(1 BFu1s_F_BFu7i) C1{ Fs:1 Fi Fi:7}



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


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



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


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



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


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



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


struct  BFu1s_F_BFu8i  {
  unsigned short v1:1;
  float v2;
  unsigned int v3:8;
};
//SIG(1 BFu1s_F_BFu8i) C1{ Fs:1 Fi Fi:8}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu1s_F_F  {
  unsigned short v1:1;
  float v2;
  float v3;
};
//SIG(1 BFu1s_F_F) C1{ Fs:1 Fi[2]}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu1s_F_Vp  {
  unsigned short v1:1;
  float v2;
  void *v3;
};
//SIG(1 BFu1s_F_Vp) C1{ Fs:1 Fi Fp}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu1s_Ip_Ip  {
  unsigned short v1:1;
  int *v2;
  int *v3;
};
//SIG(1 BFu1s_Ip_Ip) C1{ Fs:1 Fp[2]}



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu1s_Ip_Vp  {
  unsigned short v1:1;
  int *v2;
  void *v3;
};
//SIG(1 BFu1s_Ip_Vp) C1{ Fs:1 Fp[2]}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



static void Test_BFu1s_Us_I()
{
  {
    init_simple_test("BFu1s_Us_I");
    static STRUCT_IF_C BFu1s_Us_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu1s_Us_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1s_Us_I)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Us_I");
    check_field_offset(lv, v2, 2, "BFu1s_Us_I.v2");
    check_field_offset(lv, v3, 4, "BFu1s_Us_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Us_I, BFu1s_Us_I)
//============================================================================


struct  BFu1s_Us_Ip  {
  unsigned short v1:1;
  unsigned short v2;
  int *v3;
};
//SIG(1 BFu1s_Us_Ip) C1{ Fs:1 Fs Fp}



static void Test_BFu1s_Us_Ip()
{
  {
    init_simple_test("BFu1s_Us_Ip");
    static STRUCT_IF_C BFu1s_Us_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu1s_Us_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Us_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Us_Ip");
    check_field_offset(lv, v2, 2, "BFu1s_Us_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu1s_Us_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Us_Ip, BFu1s_Us_Ip)
//============================================================================


struct  BFu1s_Us_L  {
  unsigned short v1:1;
  unsigned short v2;
  __tsi64 v3;
};
//SIG(1 BFu1s_Us_L) C1{ Fs:1 Fs FL}



static void Test_BFu1s_Us_L()
{
  {
    init_simple_test("BFu1s_Us_L");
    static STRUCT_IF_C BFu1s_Us_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu1s_Us_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Us_L)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Us_L");
    check_field_offset(lv, v2, 2, "BFu1s_Us_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu1s_Us_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Us_L, BFu1s_Us_L)
//============================================================================


struct  BFu1s_Us_S  {
  unsigned short v1:1;
  unsigned short v2;
  short v3;
};
//SIG(1 BFu1s_Us_S) C1{ Fs:1 Fs[2]}



static void Test_BFu1s_Us_S()
{
  {
    init_simple_test("BFu1s_Us_S");
    static STRUCT_IF_C BFu1s_Us_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu1s_Us_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_Us_S)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Us_S");
    check_field_offset(lv, v2, 2, "BFu1s_Us_S.v2");
    check_field_offset(lv, v3, 4, "BFu1s_Us_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Us_S, BFu1s_Us_S)
//============================================================================


struct  BFu1s_Us_Uc  {
  unsigned short v1:1;
  unsigned short v2;
  unsigned char v3;
};
//SIG(1 BFu1s_Us_Uc) C1{ Fs:1 Fs Fc}



static void Test_BFu1s_Us_Uc()
{
  {
    init_simple_test("BFu1s_Us_Uc");
    static STRUCT_IF_C BFu1s_Us_Uc lv;
    check2(sizeof(lv), 6, "sizeof(BFu1s_Us_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_Us_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Us_Uc");
    check_field_offset(lv, v2, 2, "BFu1s_Us_Uc.v2");
    check_field_offset(lv, v3, 4, "BFu1s_Us_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Us_Uc, BFu1s_Us_Uc)
//============================================================================


struct  BFu1s_Us_Ui  {
  unsigned short v1:1;
  unsigned short v2;
  unsigned int v3;
};
//SIG(1 BFu1s_Us_Ui) C1{ Fs:1 Fs Fi}



static void Test_BFu1s_Us_Ui()
{
  {
    init_simple_test("BFu1s_Us_Ui");
    static STRUCT_IF_C BFu1s_Us_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu1s_Us_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1s_Us_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Us_Ui");
    check_field_offset(lv, v2, 2, "BFu1s_Us_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu1s_Us_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Us_Ui, BFu1s_Us_Ui)
//============================================================================


struct  BFu1s_Us_Ul  {
  unsigned short v1:1;
  unsigned short v2;
  __tsu64 v3;
};
//SIG(1 BFu1s_Us_Ul) C1{ Fs:1 Fs FL}



static void Test_BFu1s_Us_Ul()
{
  {
    init_simple_test("BFu1s_Us_Ul");
    static STRUCT_IF_C BFu1s_Us_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu1s_Us_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Us_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Us_Ul");
    check_field_offset(lv, v2, 2, "BFu1s_Us_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu1s_Us_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Us_Ul, BFu1s_Us_Ul)
//============================================================================


struct  BFu1s_Us_Us  {
  unsigned short v1:1;
  unsigned short v2;
  unsigned short v3;
};
//SIG(1 BFu1s_Us_Us) C1{ Fs:1 Fs[2]}



static void Test_BFu1s_Us_Us()
{
  {
    init_simple_test("BFu1s_Us_Us");
    static STRUCT_IF_C BFu1s_Us_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu1s_Us_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_Us_Us)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Us_Us");
    check_field_offset(lv, v2, 2, "BFu1s_Us_Us.v2");
    check_field_offset(lv, v3, 4, "BFu1s_Us_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Us_Us, BFu1s_Us_Us)
//============================================================================


struct  BFu1s_Us_Vp  {
  unsigned short v1:1;
  unsigned short v2;
  void *v3;
};
//SIG(1 BFu1s_Us_Vp) C1{ Fs:1 Fs Fp}



static void Test_BFu1s_Us_Vp()
{
  {
    init_simple_test("BFu1s_Us_Vp");
    static STRUCT_IF_C BFu1s_Us_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu1s_Us_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Us_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Us_Vp");
    check_field_offset(lv, v2, 2, "BFu1s_Us_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu1s_Us_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Us_Vp, BFu1s_Us_Vp)
//============================================================================


struct  BFu1s_Vp  {
  unsigned short v1:1;
  void *v2;
};
//SIG(1 BFu1s_Vp) C1{ Fs:1 Fp}



static void Test_BFu1s_Vp()
{
  {
    init_simple_test("BFu1s_Vp");
    static STRUCT_IF_C BFu1s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu1s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp, BFu1s_Vp)
//============================================================================


struct  BFu1s_Vp_BFu15i  {
  unsigned short v1:1;
  void *v2;
  unsigned int v3:15;
};
//SIG(1 BFu1s_Vp_BFu15i) C1{ Fs:1 Fp Fi:15}



static void Test_BFu1s_Vp_BFu15i()
{
  {
    init_simple_test("BFu1s_Vp_BFu15i");
    static STRUCT_IF_C BFu1s_Vp_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu1s_Vp_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu1s_Vp_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_BFu15i, BFu1s_Vp_BFu15i)
//============================================================================


struct  BFu1s_Vp_BFu15ll  {
  unsigned short v1:1;
  void *v2;
  __tsu64 v3:15;
};
//SIG(1 BFu1s_Vp_BFu15ll) C1{ Fs:1 Fp FL:15}



static void Test_BFu1s_Vp_BFu15ll()
{
  {
    init_simple_test("BFu1s_Vp_BFu15ll");
    static STRUCT_IF_C BFu1s_Vp_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu1s_Vp_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu1s_Vp_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_BFu15ll, BFu1s_Vp_BFu15ll)
//============================================================================


struct  BFu1s_Vp_BFu15s  {
  unsigned short v1:1;
  void *v2;
  unsigned short v3:15;
};
//SIG(1 BFu1s_Vp_BFu15s) C1{ Fs:1 Fp Fs:15}



static void Test_BFu1s_Vp_BFu15s()
{
  {
    init_simple_test("BFu1s_Vp_BFu15s");
    static STRUCT_IF_C BFu1s_Vp_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu1s_Vp_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu1s_Vp_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_BFu15s, BFu1s_Vp_BFu15s)
//============================================================================


struct  BFu1s_Vp_BFu16i  {
  unsigned short v1:1;
  void *v2;
  unsigned int v3:16;
};
//SIG(1 BFu1s_Vp_BFu16i) C1{ Fs:1 Fp Fi:16}



static void Test_BFu1s_Vp_BFu16i()
{
  {
    init_simple_test("BFu1s_Vp_BFu16i");
    static STRUCT_IF_C BFu1s_Vp_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu1s_Vp_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu1s_Vp_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_BFu16i, BFu1s_Vp_BFu16i)
//============================================================================


struct  BFu1s_Vp_BFu16ll  {
  unsigned short v1:1;
  void *v2;
  __tsu64 v3:16;
};
//SIG(1 BFu1s_Vp_BFu16ll) C1{ Fs:1 Fp FL:16}



static void Test_BFu1s_Vp_BFu16ll()
{
  {
    init_simple_test("BFu1s_Vp_BFu16ll");
    static STRUCT_IF_C BFu1s_Vp_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu1s_Vp_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu1s_Vp_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_BFu16ll, BFu1s_Vp_BFu16ll)
//============================================================================


struct  BFu1s_Vp_BFu16s  {
  unsigned short v1:1;
  void *v2;
  unsigned short v3:16;
};
//SIG(1 BFu1s_Vp_BFu16s) C1{ Fs:1 Fp Fs:16}



static void Test_BFu1s_Vp_BFu16s()
{
  {
    init_simple_test("BFu1s_Vp_BFu16s");
    static STRUCT_IF_C BFu1s_Vp_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu1s_Vp_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu1s_Vp_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_BFu16s, BFu1s_Vp_BFu16s)
//============================================================================


struct  BFu1s_Vp_BFu17i  {
  unsigned short v1:1;
  void *v2;
  unsigned int v3:17;
};
//SIG(1 BFu1s_Vp_BFu17i) C1{ Fs:1 Fp Fi:17}



static void Test_BFu1s_Vp_BFu17i()
{
  {
    init_simple_test("BFu1s_Vp_BFu17i");
    static STRUCT_IF_C BFu1s_Vp_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu1s_Vp_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu1s_Vp_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_BFu17i, BFu1s_Vp_BFu17i)
//============================================================================


struct  BFu1s_Vp_BFu17ll  {
  unsigned short v1:1;
  void *v2;
  __tsu64 v3:17;
};
//SIG(1 BFu1s_Vp_BFu17ll) C1{ Fs:1 Fp FL:17}



static void Test_BFu1s_Vp_BFu17ll()
{
  {
    init_simple_test("BFu1s_Vp_BFu17ll");
    static STRUCT_IF_C BFu1s_Vp_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu1s_Vp_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu1s_Vp_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_BFu17ll, BFu1s_Vp_BFu17ll)
//============================================================================


struct  BFu1s_Vp_BFu1c  {
  unsigned short v1:1;
  void *v2;
  unsigned char v3:1;
};
//SIG(1 BFu1s_Vp_BFu1c) C1{ Fs:1 Fp Fc:1}



static void Test_BFu1s_Vp_BFu1c()
{
  {
    init_simple_test("BFu1s_Vp_BFu1c");
    static STRUCT_IF_C BFu1s_Vp_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu1s_Vp_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_BFu1c, BFu1s_Vp_BFu1c)
//============================================================================


struct  BFu1s_Vp_BFu1i  {
  unsigned short v1:1;
  void *v2;
  unsigned int v3:1;
};
//SIG(1 BFu1s_Vp_BFu1i) C1{ Fs:1 Fp Fi:1}



static void Test_BFu1s_Vp_BFu1i()
{
  {
    init_simple_test("BFu1s_Vp_BFu1i");
    static STRUCT_IF_C BFu1s_Vp_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu1s_Vp_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_BFu1i, BFu1s_Vp_BFu1i)
//============================================================================


struct  BFu1s_Vp_BFu1ll  {
  unsigned short v1:1;
  void *v2;
  __tsu64 v3:1;
};
//SIG(1 BFu1s_Vp_BFu1ll) C1{ Fs:1 Fp FL:1}



static void Test_BFu1s_Vp_BFu1ll()
{
  {
    init_simple_test("BFu1s_Vp_BFu1ll");
    static STRUCT_IF_C BFu1s_Vp_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu1s_Vp_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_BFu1ll, BFu1s_Vp_BFu1ll)
//============================================================================


struct  BFu1s_Vp_BFu1s  {
  unsigned short v1:1;
  void *v2;
  unsigned short v3:1;
};
//SIG(1 BFu1s_Vp_BFu1s) C1{ Fs:1 Fp Fs:1}



static void Test_BFu1s_Vp_BFu1s()
{
  {
    init_simple_test("BFu1s_Vp_BFu1s");
    static STRUCT_IF_C BFu1s_Vp_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu1s_Vp_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_BFu1s, BFu1s_Vp_BFu1s)
//============================================================================


struct  BFu1s_Vp_BFu31i  {
  unsigned short v1:1;
  void *v2;
  unsigned int v3:31;
};
//SIG(1 BFu1s_Vp_BFu31i) C1{ Fs:1 Fp Fi:31}



static void Test_BFu1s_Vp_BFu31i()
{
  {
    init_simple_test("BFu1s_Vp_BFu31i");
    static STRUCT_IF_C BFu1s_Vp_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu1s_Vp_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu1s_Vp_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_BFu31i, BFu1s_Vp_BFu31i)
//============================================================================


struct  BFu1s_Vp_BFu31ll  {
  unsigned short v1:1;
  void *v2;
  __tsu64 v3:31;
};
//SIG(1 BFu1s_Vp_BFu31ll) C1{ Fs:1 Fp FL:31}



static void Test_BFu1s_Vp_BFu31ll()
{
  {
    init_simple_test("BFu1s_Vp_BFu31ll");
    static STRUCT_IF_C BFu1s_Vp_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu1s_Vp_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu1s_Vp_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_BFu31ll, BFu1s_Vp_BFu31ll)
//============================================================================


struct  BFu1s_Vp_BFu32i  {
  unsigned short v1:1;
  void *v2;
  unsigned int v3:32;
};
//SIG(1 BFu1s_Vp_BFu32i) C1{ Fs:1 Fp Fi:32}



static void Test_BFu1s_Vp_BFu32i()
{
  {
    init_simple_test("BFu1s_Vp_BFu32i");
    static STRUCT_IF_C BFu1s_Vp_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu1s_Vp_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu1s_Vp_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_BFu32i, BFu1s_Vp_BFu32i)
//============================================================================


struct  BFu1s_Vp_BFu32ll  {
  unsigned short v1:1;
  void *v2;
  __tsu64 v3:32;
};
//SIG(1 BFu1s_Vp_BFu32ll) C1{ Fs:1 Fp FL:32}



static void Test_BFu1s_Vp_BFu32ll()
{
  {
    init_simple_test("BFu1s_Vp_BFu32ll");
    static STRUCT_IF_C BFu1s_Vp_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu1s_Vp_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu1s_Vp_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_BFu32ll, BFu1s_Vp_BFu32ll)
//============================================================================


struct  BFu1s_Vp_BFu33  {
  unsigned short v1:1;
  void *v2;
  __tsu64 v3:33;
};
//SIG(1 BFu1s_Vp_BFu33) C1{ Fs:1 Fp FL:33}



static void Test_BFu1s_Vp_BFu33()
{
  {
    init_simple_test("BFu1s_Vp_BFu33");
    static STRUCT_IF_C BFu1s_Vp_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu1s_Vp_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "BFu1s_Vp_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "BFu1s_Vp_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_BFu33, BFu1s_Vp_BFu33)
//============================================================================


struct  BFu1s_Vp_BFu7c  {
  unsigned short v1:1;
  void *v2;
  unsigned char v3:7;
};
//SIG(1 BFu1s_Vp_BFu7c) C1{ Fs:1 Fp Fc:7}



static void Test_BFu1s_Vp_BFu7c()
{
  {
    init_simple_test("BFu1s_Vp_BFu7c");
    static STRUCT_IF_C BFu1s_Vp_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu1s_Vp_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu1s_Vp_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_BFu7c, BFu1s_Vp_BFu7c)
//============================================================================


struct  BFu1s_Vp_BFu7i  {
  unsigned short v1:1;
  void *v2;
  unsigned int v3:7;
};
//SIG(1 BFu1s_Vp_BFu7i) C1{ Fs:1 Fp Fi:7}



static void Test_BFu1s_Vp_BFu7i()
{
  {
    init_simple_test("BFu1s_Vp_BFu7i");
    static STRUCT_IF_C BFu1s_Vp_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu1s_Vp_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu1s_Vp_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_BFu7i, BFu1s_Vp_BFu7i)
//============================================================================


struct  BFu1s_Vp_BFu7ll  {
  unsigned short v1:1;
  void *v2;
  __tsu64 v3:7;
};
//SIG(1 BFu1s_Vp_BFu7ll) C1{ Fs:1 Fp FL:7}



static void Test_BFu1s_Vp_BFu7ll()
{
  {
    init_simple_test("BFu1s_Vp_BFu7ll");
    static STRUCT_IF_C BFu1s_Vp_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu1s_Vp_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu1s_Vp_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_BFu7ll, BFu1s_Vp_BFu7ll)
//============================================================================


struct  BFu1s_Vp_BFu7s  {
  unsigned short v1:1;
  void *v2;
  unsigned short v3:7;
};
//SIG(1 BFu1s_Vp_BFu7s) C1{ Fs:1 Fp Fs:7}



static void Test_BFu1s_Vp_BFu7s()
{
  {
    init_simple_test("BFu1s_Vp_BFu7s");
    static STRUCT_IF_C BFu1s_Vp_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu1s_Vp_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu1s_Vp_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_BFu7s, BFu1s_Vp_BFu7s)
//============================================================================


struct  BFu1s_Vp_BFu8c  {
  unsigned short v1:1;
  void *v2;
  unsigned char v3:8;
};
//SIG(1 BFu1s_Vp_BFu8c) C1{ Fs:1 Fp Fc:8}



static void Test_BFu1s_Vp_BFu8c()
{
  {
    init_simple_test("BFu1s_Vp_BFu8c");
    static STRUCT_IF_C BFu1s_Vp_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu1s_Vp_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu1s_Vp_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_BFu8c, BFu1s_Vp_BFu8c)
//============================================================================


struct  BFu1s_Vp_BFu8i  {
  unsigned short v1:1;
  void *v2;
  unsigned int v3:8;
};
//SIG(1 BFu1s_Vp_BFu8i) C1{ Fs:1 Fp Fi:8}



static void Test_BFu1s_Vp_BFu8i()
{
  {
    init_simple_test("BFu1s_Vp_BFu8i");
    static STRUCT_IF_C BFu1s_Vp_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu1s_Vp_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu1s_Vp_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_BFu8i, BFu1s_Vp_BFu8i)
//============================================================================


struct  BFu1s_Vp_BFu8ll  {
  unsigned short v1:1;
  void *v2;
  __tsu64 v3:8;
};
//SIG(1 BFu1s_Vp_BFu8ll) C1{ Fs:1 Fp FL:8}



static void Test_BFu1s_Vp_BFu8ll()
{
  {
    init_simple_test("BFu1s_Vp_BFu8ll");
    static STRUCT_IF_C BFu1s_Vp_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu1s_Vp_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu1s_Vp_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_BFu8ll, BFu1s_Vp_BFu8ll)
//============================================================================


struct  BFu1s_Vp_BFu8s  {
  unsigned short v1:1;
  void *v2;
  unsigned short v3:8;
};
//SIG(1 BFu1s_Vp_BFu8s) C1{ Fs:1 Fp Fs:8}



static void Test_BFu1s_Vp_BFu8s()
{
  {
    init_simple_test("BFu1s_Vp_BFu8s");
    static STRUCT_IF_C BFu1s_Vp_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu1s_Vp_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu1s_Vp_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_BFu8s, BFu1s_Vp_BFu8s)
//============================================================================


struct  BFu1s_Vp_BFu9i  {
  unsigned short v1:1;
  void *v2;
  unsigned int v3:9;
};
//SIG(1 BFu1s_Vp_BFu9i) C1{ Fs:1 Fp Fi:9}



static void Test_BFu1s_Vp_BFu9i()
{
  {
    init_simple_test("BFu1s_Vp_BFu9i");
    static STRUCT_IF_C BFu1s_Vp_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu1s_Vp_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu1s_Vp_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_BFu9i, BFu1s_Vp_BFu9i)
//============================================================================


struct  BFu1s_Vp_BFu9ll  {
  unsigned short v1:1;
  void *v2;
  __tsu64 v3:9;
};
//SIG(1 BFu1s_Vp_BFu9ll) C1{ Fs:1 Fp FL:9}



static void Test_BFu1s_Vp_BFu9ll()
{
  {
    init_simple_test("BFu1s_Vp_BFu9ll");
    static STRUCT_IF_C BFu1s_Vp_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu1s_Vp_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu1s_Vp_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_BFu9ll, BFu1s_Vp_BFu9ll)
//============================================================================


struct  BFu1s_Vp_BFu9s  {
  unsigned short v1:1;
  void *v2;
  unsigned short v3:9;
};
//SIG(1 BFu1s_Vp_BFu9s) C1{ Fs:1 Fp Fs:9}



static void Test_BFu1s_Vp_BFu9s()
{
  {
    init_simple_test("BFu1s_Vp_BFu9s");
    static STRUCT_IF_C BFu1s_Vp_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu1s_Vp_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu1s_Vp_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_BFu9s, BFu1s_Vp_BFu9s)
//============================================================================


struct  BFu1s_Vp_C  {
  unsigned short v1:1;
  void *v2;
  char v3;
};
//SIG(1 BFu1s_Vp_C) C1{ Fs:1 Fp Fc}



static void Test_BFu1s_Vp_C()
{
  {
    init_simple_test("BFu1s_Vp_C");
    static STRUCT_IF_C BFu1s_Vp_C lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_C)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu1s_Vp_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_C, BFu1s_Vp_C)
//============================================================================


struct  BFu1s_Vp_D  {
  unsigned short v1:1;
  void *v2;
  double v3;
};
//SIG(1 BFu1s_Vp_D) C1{ Fs:1 Fp FL}



static void Test_BFu1s_Vp_D()
{
  {
    init_simple_test("BFu1s_Vp_D");
    static STRUCT_IF_C BFu1s_Vp_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu1s_Vp_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_D)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu1s_Vp_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_D, BFu1s_Vp_D)
//============================================================================


struct  BFu1s_Vp_F  {
  unsigned short v1:1;
  void *v2;
  float v3;
};
//SIG(1 BFu1s_Vp_F) C1{ Fs:1 Fp Fi}



static void Test_BFu1s_Vp_F()
{
  {
    init_simple_test("BFu1s_Vp_F");
    static STRUCT_IF_C BFu1s_Vp_F lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_F)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu1s_Vp_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_F, BFu1s_Vp_F)
//============================================================================


struct  BFu1s_Vp_I  {
  unsigned short v1:1;
  void *v2;
  int v3;
};
//SIG(1 BFu1s_Vp_I) C1{ Fs:1 Fp Fi}



static void Test_BFu1s_Vp_I()
{
  {
    init_simple_test("BFu1s_Vp_I");
    static STRUCT_IF_C BFu1s_Vp_I lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_I)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu1s_Vp_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_I, BFu1s_Vp_I)
//============================================================================


struct  BFu1s_Vp_Ip  {
  unsigned short v1:1;
  void *v2;
  int *v3;
};
//SIG(1 BFu1s_Vp_Ip) C1{ Fs:1 Fp[2]}



static void Test_BFu1s_Vp_Ip()
{
  {
    init_simple_test("BFu1s_Vp_Ip");
    static STRUCT_IF_C BFu1s_Vp_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu1s_Vp_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_Ip, BFu1s_Vp_Ip)
//============================================================================


struct  BFu1s_Vp_L  {
  unsigned short v1:1;
  void *v2;
  __tsi64 v3;
};
//SIG(1 BFu1s_Vp_L) C1{ Fs:1 Fp FL}



static void Test_BFu1s_Vp_L()
{
  {
    init_simple_test("BFu1s_Vp_L");
    static STRUCT_IF_C BFu1s_Vp_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu1s_Vp_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_L)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu1s_Vp_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_L, BFu1s_Vp_L)
//============================================================================


struct  BFu1s_Vp_S  {
  unsigned short v1:1;
  void *v2;
  short v3;
};
//SIG(1 BFu1s_Vp_S) C1{ Fs:1 Fp Fs}



static void Test_BFu1s_Vp_S()
{
  {
    init_simple_test("BFu1s_Vp_S");
    static STRUCT_IF_C BFu1s_Vp_S lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_S)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu1s_Vp_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_S, BFu1s_Vp_S)
//============================================================================


struct  BFu1s_Vp_Uc  {
  unsigned short v1:1;
  void *v2;
  unsigned char v3;
};
//SIG(1 BFu1s_Vp_Uc) C1{ Fs:1 Fp Fc}



static void Test_BFu1s_Vp_Uc()
{
  {
    init_simple_test("BFu1s_Vp_Uc");
    static STRUCT_IF_C BFu1s_Vp_Uc lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu1s_Vp_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_Uc, BFu1s_Vp_Uc)
//============================================================================


struct  BFu1s_Vp_Ui  {
  unsigned short v1:1;
  void *v2;
  unsigned int v3;
};
//SIG(1 BFu1s_Vp_Ui) C1{ Fs:1 Fp Fi}



static void Test_BFu1s_Vp_Ui()
{
  {
    init_simple_test("BFu1s_Vp_Ui");
    static STRUCT_IF_C BFu1s_Vp_Ui lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu1s_Vp_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_Ui, BFu1s_Vp_Ui)
//============================================================================


struct  BFu1s_Vp_Ul  {
  unsigned short v1:1;
  void *v2;
  __tsu64 v3;
};
//SIG(1 BFu1s_Vp_Ul) C1{ Fs:1 Fp FL}



static void Test_BFu1s_Vp_Ul()
{
  {
    init_simple_test("BFu1s_Vp_Ul");
    static STRUCT_IF_C BFu1s_Vp_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu1s_Vp_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu1s_Vp_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_Ul, BFu1s_Vp_Ul)
//============================================================================


struct  BFu1s_Vp_Us  {
  unsigned short v1:1;
  void *v2;
  unsigned short v3;
};
//SIG(1 BFu1s_Vp_Us) C1{ Fs:1 Fp Fs}



static void Test_BFu1s_Vp_Us()
{
  {
    init_simple_test("BFu1s_Vp_Us");
    static STRUCT_IF_C BFu1s_Vp_Us lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_Us)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu1s_Vp_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_Us, BFu1s_Vp_Us)
//============================================================================


struct  BFu1s_Vp_Vp  {
  unsigned short v1:1;
  void *v2;
  void *v3;
};
//SIG(1 BFu1s_Vp_Vp) C1{ Fs:1 Fp[2]}



static void Test_BFu1s_Vp_Vp()
{
  {
    init_simple_test("BFu1s_Vp_Vp");
    static STRUCT_IF_C BFu1s_Vp_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu1s_Vp_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu1s_Vp_Vp, BFu1s_Vp_Vp)
//============================================================================


struct  BFu31i  {
  unsigned int v1:31;
};
//SIG(1 BFu31i) C1{ Fi:31}



static void Test_BFu31i()
{
  {
    init_simple_test("BFu31i");
    static STRUCT_IF_C BFu31i lv;
    check2(sizeof(lv), 4, "sizeof(BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i, BFu31i)
//============================================================================


struct  BFu31i_BFs31i  {
  unsigned int v1:31;
  signed int v2:31;
};
//SIG(1 BFu31i_BFs31i) C1{ Fi:31 Fi:31}



static void Test_BFu31i_BFs31i()
{
  {
    init_simple_test("BFu31i_BFs31i");
    static STRUCT_IF_C BFu31i_BFs31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFs31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31i, BFu31i_BFs31i)
//============================================================================


struct  BFu31i_BFs31i_BFs31i  {
  unsigned int v1:31;
  signed int v2:31;
  signed int v3:31;
};
//SIG(1 BFu31i_BFs31i_BFs31i) C1{ Fi:31 Fi:31 Fi:31}



static void Test_BFu31i_BFs31i_BFs31i()
{
  {
    init_simple_test("BFu31i_BFs31i_BFs31i");
    static STRUCT_IF_C BFu31i_BFs31i_BFs31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFs31i_BFs31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFs31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31i_BFs31i, BFu31i_BFs31i_BFs31i)
//============================================================================


struct  BFu31i_BFs31i_BFs31i_BFs31i  {
  unsigned int v1:31;
  signed int v2:31;
  signed int v3:31;
  signed int v4:31;
};
//SIG(1 BFu31i_BFs31i_BFs31i_BFs31i) C1{ Fi:31 Fi:31 Fi:31 Fi:31}



static void Test_BFu31i_BFs31i_BFs31i_BFs31i()
{
  {
    init_simple_test("BFu31i_BFs31i_BFs31i_BFs31i");
    static STRUCT_IF_C BFu31i_BFs31i_BFs31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31i_BFs31i_BFs31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFs31i_BFs31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFs31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31i_BFs31i_BFs31i, BFu31i_BFs31i_BFs31i_BFs31i)
//============================================================================


struct  BFu31i_BFs31i_BFs31i_BFs31ll  {
  unsigned int v1:31;
  signed int v2:31;
  signed int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31i_BFs31i_BFs31i_BFs31ll) C1{ Fi:31 Fi:31 Fi:31 FL:31}



static void Test_BFu31i_BFs31i_BFs31i_BFs31ll()
{
  {
    init_simple_test("BFu31i_BFs31i_BFs31i_BFs31ll");
    static STRUCT_IF_C BFu31i_BFs31i_BFs31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31i_BFs31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31i_BFs31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31i_BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFs31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31i_BFs31i_BFs31ll, BFu31i_BFs31i_BFs31i_BFs31ll)
//============================================================================


struct  BFu31i_BFs31i_BFs31i_BFu31i  {
  unsigned int v1:31;
  signed int v2:31;
  signed int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31i_BFs31i_BFs31i_BFu31i) C1{ Fi:31 Fi:31 Fi:31 Fi:31}



static void Test_BFu31i_BFs31i_BFs31i_BFu31i()
{
  {
    init_simple_test("BFu31i_BFs31i_BFs31i_BFu31i");
    static STRUCT_IF_C BFu31i_BFs31i_BFs31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31i_BFs31i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFs31i_BFs31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFs31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31i_BFs31i_BFu31i, BFu31i_BFs31i_BFs31i_BFu31i)
//============================================================================


struct  BFu31i_BFs31i_BFs31i_BFu31ll  {
  unsigned int v1:31;
  signed int v2:31;
  signed int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31i_BFs31i_BFs31i_BFu31ll) C1{ Fi:31 Fi:31 Fi:31 FL:31}



static void Test_BFu31i_BFs31i_BFs31i_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFs31i_BFs31i_BFu31ll");
    static STRUCT_IF_C BFu31i_BFs31i_BFs31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31i_BFs31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31i_BFs31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31i_BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFs31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31i_BFs31i_BFu31ll, BFu31i_BFs31i_BFs31i_BFu31ll)
//============================================================================


struct  BFu31i_BFs31i_BFs31ll  {
  unsigned int v1:31;
  signed int v2:31;
  signed __tsi64 v3:31;
};
//SIG(1 BFu31i_BFs31i_BFs31ll) C1{ Fi:31 Fi:31 FL:31}



static void Test_BFu31i_BFs31i_BFs31ll()
{
  {
    init_simple_test("BFu31i_BFs31i_BFs31ll");
    static STRUCT_IF_C BFu31i_BFs31i_BFs31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFs31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31i_BFs31ll, BFu31i_BFs31i_BFs31ll)
//============================================================================


struct  BFu31i_BFs31i_BFs31ll_BFs31i  {
  unsigned int v1:31;
  signed int v2:31;
  signed __tsi64 v3:31;
  signed int v4:31;
};
//SIG(1 BFu31i_BFs31i_BFs31ll_BFs31i) C1{ Fi:31 Fi:31 FL:31 Fi:31}



static void Test_BFu31i_BFs31i_BFs31ll_BFs31i()
{
  {
    init_simple_test("BFu31i_BFs31i_BFs31ll_BFs31i");
    static STRUCT_IF_C BFu31i_BFs31i_BFs31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31i_BFs31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31i_BFs31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31i_BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFs31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31i_BFs31ll_BFs31i, BFu31i_BFs31i_BFs31ll_BFs31i)
//============================================================================


struct  BFu31i_BFs31i_BFs31ll_BFs31ll  {
  unsigned int v1:31;
  signed int v2:31;
  signed __tsi64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31i_BFs31i_BFs31ll_BFs31ll) C1{ Fi:31 Fi:31 FL:31 FL:31}



static void Test_BFu31i_BFs31i_BFs31ll_BFs31ll()
{
  {
    init_simple_test("BFu31i_BFs31i_BFs31ll_BFs31ll");
    static STRUCT_IF_C BFu31i_BFs31i_BFs31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31i_BFs31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31i_BFs31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31i_BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFu31i_BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFs31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31i_BFs31ll_BFs31ll, BFu31i_BFs31i_BFs31ll_BFs31ll)
//============================================================================


struct  BFu31i_BFs31i_BFs31ll_BFu31i  {
  unsigned int v1:31;
  signed int v2:31;
  signed __tsi64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31i_BFs31i_BFs31ll_BFu31i) C1{ Fi:31 Fi:31 FL:31 Fi:31}



static void Test_BFu31i_BFs31i_BFs31ll_BFu31i()
{
  {
    init_simple_test("BFu31i_BFs31i_BFs31ll_BFu31i");
    static STRUCT_IF_C BFu31i_BFs31i_BFs31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31i_BFs31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31i_BFs31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31i_BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFs31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31i_BFs31ll_BFu31i, BFu31i_BFs31i_BFs31ll_BFu31i)
//============================================================================


struct  BFu31i_BFs31i_BFs31ll_BFu31ll  {
  unsigned int v1:31;
  signed int v2:31;
  signed __tsi64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31i_BFs31i_BFs31ll_BFu31ll) C1{ Fi:31 Fi:31 FL:31 FL:31}



static void Test_BFu31i_BFs31i_BFs31ll_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFs31i_BFs31ll_BFu31ll");
    static STRUCT_IF_C BFu31i_BFs31i_BFs31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31i_BFs31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31i_BFs31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31i_BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFu31i_BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFs31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31i_BFs31ll_BFu31ll, BFu31i_BFs31i_BFs31ll_BFu31ll)
//============================================================================


struct  BFu31i_BFs31i_BFu31i  {
  unsigned int v1:31;
  signed int v2:31;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFs31i_BFu31i) C1{ Fi:31 Fi:31 Fi:31}



static void Test_BFu31i_BFs31i_BFu31i()
{
  {
    init_simple_test("BFu31i_BFs31i_BFu31i");
    static STRUCT_IF_C BFu31i_BFs31i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFs31i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFs31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31i_BFu31i, BFu31i_BFs31i_BFu31i)
//============================================================================


struct  BFu31i_BFs31i_BFu31i_BFs31i  {
  unsigned int v1:31;
  signed int v2:31;
  unsigned int v3:31;
  signed int v4:31;
};
//SIG(1 BFu31i_BFs31i_BFu31i_BFs31i) C1{ Fi:31 Fi:31 Fi:31 Fi:31}



static void Test_BFu31i_BFs31i_BFu31i_BFs31i()
{
  {
    init_simple_test("BFu31i_BFs31i_BFu31i_BFs31i");
    static STRUCT_IF_C BFu31i_BFs31i_BFu31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31i_BFu31i_BFs31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFs31i_BFu31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFu31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31i_BFu31i_BFs31i, BFu31i_BFs31i_BFu31i_BFs31i)
//============================================================================


struct  BFu31i_BFs31i_BFu31i_BFs31ll  {
  unsigned int v1:31;
  signed int v2:31;
  unsigned int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31i_BFs31i_BFu31i_BFs31ll) C1{ Fi:31 Fi:31 Fi:31 FL:31}



static void Test_BFu31i_BFs31i_BFu31i_BFs31ll()
{
  {
    init_simple_test("BFu31i_BFs31i_BFu31i_BFs31ll");
    static STRUCT_IF_C BFu31i_BFs31i_BFu31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31i_BFu31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31i_BFu31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31i_BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFu31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31i_BFu31i_BFs31ll, BFu31i_BFs31i_BFu31i_BFs31ll)
//============================================================================


struct  BFu31i_BFs31i_BFu31i_BFu31i  {
  unsigned int v1:31;
  signed int v2:31;
  unsigned int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31i_BFs31i_BFu31i_BFu31i) C1{ Fi:31 Fi:31 Fi:31 Fi:31}



static void Test_BFu31i_BFs31i_BFu31i_BFu31i()
{
  {
    init_simple_test("BFu31i_BFs31i_BFu31i_BFu31i");
    static STRUCT_IF_C BFu31i_BFs31i_BFu31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31i_BFu31i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFs31i_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31i_BFu31i_BFu31i, BFu31i_BFs31i_BFu31i_BFu31i)
//============================================================================


struct  BFu31i_BFs31i_BFu31i_BFu31ll  {
  unsigned int v1:31;
  signed int v2:31;
  unsigned int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31i_BFs31i_BFu31i_BFu31ll) C1{ Fi:31 Fi:31 Fi:31 FL:31}



static void Test_BFu31i_BFs31i_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFs31i_BFu31i_BFu31ll");
    static STRUCT_IF_C BFu31i_BFs31i_BFu31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31i_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31i_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31i_BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31i_BFu31i_BFu31ll, BFu31i_BFs31i_BFu31i_BFu31ll)
//============================================================================


struct  BFu31i_BFs31i_BFu31ll  {
  unsigned int v1:31;
  signed int v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFs31i_BFu31ll) C1{ Fi:31 Fi:31 FL:31}



static void Test_BFu31i_BFs31i_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFs31i_BFu31ll");
    static STRUCT_IF_C BFu31i_BFs31i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFs31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31i_BFu31ll, BFu31i_BFs31i_BFu31ll)
//============================================================================


struct  BFu31i_BFs31i_BFu31ll_BFs31i  {
  unsigned int v1:31;
  signed int v2:31;
  __tsu64 v3:31;
  signed int v4:31;
};
//SIG(1 BFu31i_BFs31i_BFu31ll_BFs31i) C1{ Fi:31 Fi:31 FL:31 Fi:31}



static void Test_BFu31i_BFs31i_BFu31ll_BFs31i()
{
  {
    init_simple_test("BFu31i_BFs31i_BFu31ll_BFs31i");
    static STRUCT_IF_C BFu31i_BFs31i_BFu31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31i_BFu31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31i_BFu31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31i_BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFu31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31i_BFu31ll_BFs31i, BFu31i_BFs31i_BFu31ll_BFs31i)
//============================================================================


struct  BFu31i_BFs31i_BFu31ll_BFs31ll  {
  unsigned int v1:31;
  signed int v2:31;
  __tsu64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31i_BFs31i_BFu31ll_BFs31ll) C1{ Fi:31 Fi:31 FL:31 FL:31}



static void Test_BFu31i_BFs31i_BFu31ll_BFs31ll()
{
  {
    init_simple_test("BFu31i_BFs31i_BFu31ll_BFs31ll");
    static STRUCT_IF_C BFu31i_BFs31i_BFu31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31i_BFu31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31i_BFu31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31i_BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFu31i_BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFu31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31i_BFu31ll_BFs31ll, BFu31i_BFs31i_BFu31ll_BFs31ll)
//============================================================================


struct  BFu31i_BFs31i_BFu31ll_BFu31i  {
  unsigned int v1:31;
  signed int v2:31;
  __tsu64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31i_BFs31i_BFu31ll_BFu31i) C1{ Fi:31 Fi:31 FL:31 Fi:31}



static void Test_BFu31i_BFs31i_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFu31i_BFs31i_BFu31ll_BFu31i");
    static STRUCT_IF_C BFu31i_BFs31i_BFu31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31i_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31i_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31i_BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31i_BFu31ll_BFu31i, BFu31i_BFs31i_BFu31ll_BFu31i)
//============================================================================


struct  BFu31i_BFs31i_BFu31ll_BFu31ll  {
  unsigned int v1:31;
  signed int v2:31;
  __tsu64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31i_BFs31i_BFu31ll_BFu31ll) C1{ Fi:31 Fi:31 FL:31 FL:31}



static void Test_BFu31i_BFs31i_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFs31i_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFu31i_BFs31i_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31i_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31i_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31i_BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFu31i_BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_ull(1LL<<30), "BFu31i_BFs31i_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31i_BFu31ll_BFu31ll, BFu31i_BFs31i_BFu31ll_BFu31ll)
//============================================================================


struct  BFu31i_BFs31ll  {
  unsigned int v1:31;
  signed __tsi64 v2:31;
};
//SIG(1 BFu31i_BFs31ll) C1{ Fi:31 FL:31}



static void Test_BFu31i_BFs31ll()
{
  {
    init_simple_test("BFu31i_BFs31ll");
    static STRUCT_IF_C BFu31i_BFs31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31ll, BFu31i_BFs31ll)
//============================================================================


struct  BFu31i_BFs31ll_BFs31i  {
  unsigned int v1:31;
  signed __tsi64 v2:31;
  signed int v3:31;
};
//SIG(1 BFu31i_BFs31ll_BFs31i) C1{ Fi:31 FL:31 Fi:31}



static void Test_BFu31i_BFs31ll_BFs31i()
{
  {
    init_simple_test("BFu31i_BFs31ll_BFs31i");
    static STRUCT_IF_C BFu31i_BFs31ll_BFs31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFs31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31ll_BFs31i, BFu31i_BFs31ll_BFs31i)
//============================================================================


struct  BFu31i_BFs31ll_BFs31i_BFs31i  {
  unsigned int v1:31;
  signed __tsi64 v2:31;
  signed int v3:31;
  signed int v4:31;
};
//SIG(1 BFu31i_BFs31ll_BFs31i_BFs31i) C1{ Fi:31 FL:31 Fi:31 Fi:31}



static void Test_BFu31i_BFs31ll_BFs31i_BFs31i()
{
  {
    init_simple_test("BFu31i_BFs31ll_BFs31i_BFs31i");
    static STRUCT_IF_C BFu31i_BFs31ll_BFs31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31ll_BFs31i_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31ll_BFs31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFs31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31ll_BFs31i_BFs31i, BFu31i_BFs31ll_BFs31i_BFs31i)
//============================================================================


struct  BFu31i_BFs31ll_BFs31i_BFs31ll  {
  unsigned int v1:31;
  signed __tsi64 v2:31;
  signed int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31i_BFs31ll_BFs31i_BFs31ll) C1{ Fi:31 FL:31 Fi:31 FL:31}



static void Test_BFu31i_BFs31ll_BFs31i_BFs31ll()
{
  {
    init_simple_test("BFu31i_BFs31ll_BFs31i_BFs31ll");
    static STRUCT_IF_C BFu31i_BFs31ll_BFs31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31ll_BFs31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31ll_BFs31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31i_BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFs31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31ll_BFs31i_BFs31ll, BFu31i_BFs31ll_BFs31i_BFs31ll)
//============================================================================


struct  BFu31i_BFs31ll_BFs31i_BFu31i  {
  unsigned int v1:31;
  signed __tsi64 v2:31;
  signed int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31i_BFs31ll_BFs31i_BFu31i) C1{ Fi:31 FL:31 Fi:31 Fi:31}



static void Test_BFu31i_BFs31ll_BFs31i_BFu31i()
{
  {
    init_simple_test("BFu31i_BFs31ll_BFs31i_BFu31i");
    static STRUCT_IF_C BFu31i_BFs31ll_BFs31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31ll_BFs31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31ll_BFs31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFs31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31ll_BFs31i_BFu31i, BFu31i_BFs31ll_BFs31i_BFu31i)
//============================================================================


struct  BFu31i_BFs31ll_BFs31i_BFu31ll  {
  unsigned int v1:31;
  signed __tsi64 v2:31;
  signed int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31i_BFs31ll_BFs31i_BFu31ll) C1{ Fi:31 FL:31 Fi:31 FL:31}



static void Test_BFu31i_BFs31ll_BFs31i_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFs31ll_BFs31i_BFu31ll");
    static STRUCT_IF_C BFu31i_BFs31ll_BFs31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31ll_BFs31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31ll_BFs31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31i_BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFs31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31ll_BFs31i_BFu31ll, BFu31i_BFs31ll_BFs31i_BFu31ll)
//============================================================================


struct  BFu31i_BFs31ll_BFs31ll  {
  unsigned int v1:31;
  signed __tsi64 v2:31;
  signed __tsi64 v3:31;
};
//SIG(1 BFu31i_BFs31ll_BFs31ll) C1{ Fi:31 FL:31 FL:31}



static void Test_BFu31i_BFs31ll_BFs31ll()
{
  {
    init_simple_test("BFu31i_BFs31ll_BFs31ll");
    static STRUCT_IF_C BFu31i_BFs31ll_BFs31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFs31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31ll_BFs31ll, BFu31i_BFs31ll_BFs31ll)
//============================================================================


struct  BFu31i_BFs31ll_BFs31ll_BFs31i  {
  unsigned int v1:31;
  signed __tsi64 v2:31;
  signed __tsi64 v3:31;
  signed int v4:31;
};
//SIG(1 BFu31i_BFs31ll_BFs31ll_BFs31i) C1{ Fi:31 FL:31 FL:31 Fi:31}



static void Test_BFu31i_BFs31ll_BFs31ll_BFs31i()
{
  {
    init_simple_test("BFu31i_BFs31ll_BFs31ll_BFs31i");
    static STRUCT_IF_C BFu31i_BFs31ll_BFs31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31ll_BFs31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31ll_BFs31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31i_BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFs31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31ll_BFs31ll_BFs31i, BFu31i_BFs31ll_BFs31ll_BFs31i)
//============================================================================


struct  BFu31i_BFs31ll_BFs31ll_BFs31ll  {
  unsigned int v1:31;
  signed __tsi64 v2:31;
  signed __tsi64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31i_BFs31ll_BFs31ll_BFs31ll) C1{ Fi:31 FL:31 FL:31 FL:31}



static void Test_BFu31i_BFs31ll_BFs31ll_BFs31ll()
{
  {
    init_simple_test("BFu31i_BFs31ll_BFs31ll_BFs31ll");
    static STRUCT_IF_C BFu31i_BFs31ll_BFs31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31ll_BFs31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31ll_BFs31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31i_BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFu31i_BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFs31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31ll_BFs31ll_BFs31ll, BFu31i_BFs31ll_BFs31ll_BFs31ll)
//============================================================================


struct  BFu31i_BFs31ll_BFs31ll_BFu31i  {
  unsigned int v1:31;
  signed __tsi64 v2:31;
  signed __tsi64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31i_BFs31ll_BFs31ll_BFu31i) C1{ Fi:31 FL:31 FL:31 Fi:31}



static void Test_BFu31i_BFs31ll_BFs31ll_BFu31i()
{
  {
    init_simple_test("BFu31i_BFs31ll_BFs31ll_BFu31i");
    static STRUCT_IF_C BFu31i_BFs31ll_BFs31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31ll_BFs31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31ll_BFs31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31i_BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFs31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31ll_BFs31ll_BFu31i, BFu31i_BFs31ll_BFs31ll_BFu31i)
//============================================================================


struct  BFu31i_BFs31ll_BFs31ll_BFu31ll  {
  unsigned int v1:31;
  signed __tsi64 v2:31;
  signed __tsi64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31i_BFs31ll_BFs31ll_BFu31ll) C1{ Fi:31 FL:31 FL:31 FL:31}



static void Test_BFu31i_BFs31ll_BFs31ll_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFs31ll_BFs31ll_BFu31ll");
    static STRUCT_IF_C BFu31i_BFs31ll_BFs31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31ll_BFs31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31ll_BFs31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31i_BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFu31i_BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFs31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31ll_BFs31ll_BFu31ll, BFu31i_BFs31ll_BFs31ll_BFu31ll)
//============================================================================


struct  BFu31i_BFs31ll_BFu31i  {
  unsigned int v1:31;
  signed __tsi64 v2:31;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFs31ll_BFu31i) C1{ Fi:31 FL:31 Fi:31}



static void Test_BFu31i_BFs31ll_BFu31i()
{
  {
    init_simple_test("BFu31i_BFs31ll_BFu31i");
    static STRUCT_IF_C BFu31i_BFs31ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFs31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31ll_BFu31i, BFu31i_BFs31ll_BFu31i)
//============================================================================


struct  BFu31i_BFs31ll_BFu31i_BFs31i  {
  unsigned int v1:31;
  signed __tsi64 v2:31;
  unsigned int v3:31;
  signed int v4:31;
};
//SIG(1 BFu31i_BFs31ll_BFu31i_BFs31i) C1{ Fi:31 FL:31 Fi:31 Fi:31}



static void Test_BFu31i_BFs31ll_BFu31i_BFs31i()
{
  {
    init_simple_test("BFu31i_BFs31ll_BFu31i_BFs31i");
    static STRUCT_IF_C BFu31i_BFs31ll_BFu31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31ll_BFu31i_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31ll_BFu31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFu31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31ll_BFu31i_BFs31i, BFu31i_BFs31ll_BFu31i_BFs31i)
//============================================================================


struct  BFu31i_BFs31ll_BFu31i_BFs31ll  {
  unsigned int v1:31;
  signed __tsi64 v2:31;
  unsigned int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31i_BFs31ll_BFu31i_BFs31ll) C1{ Fi:31 FL:31 Fi:31 FL:31}



static void Test_BFu31i_BFs31ll_BFu31i_BFs31ll()
{
  {
    init_simple_test("BFu31i_BFs31ll_BFu31i_BFs31ll");
    static STRUCT_IF_C BFu31i_BFs31ll_BFu31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31ll_BFu31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31ll_BFu31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31i_BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFu31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31ll_BFu31i_BFs31ll, BFu31i_BFs31ll_BFu31i_BFs31ll)
//============================================================================


struct  BFu31i_BFs31ll_BFu31i_BFu31i  {
  unsigned int v1:31;
  signed __tsi64 v2:31;
  unsigned int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31i_BFs31ll_BFu31i_BFu31i) C1{ Fi:31 FL:31 Fi:31 Fi:31}



static void Test_BFu31i_BFs31ll_BFu31i_BFu31i()
{
  {
    init_simple_test("BFu31i_BFs31ll_BFu31i_BFu31i");
    static STRUCT_IF_C BFu31i_BFs31ll_BFu31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31ll_BFu31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31ll_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31ll_BFu31i_BFu31i, BFu31i_BFs31ll_BFu31i_BFu31i)
//============================================================================


struct  BFu31i_BFs31ll_BFu31i_BFu31ll  {
  unsigned int v1:31;
  signed __tsi64 v2:31;
  unsigned int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31i_BFs31ll_BFu31i_BFu31ll) C1{ Fi:31 FL:31 Fi:31 FL:31}



static void Test_BFu31i_BFs31ll_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFs31ll_BFu31i_BFu31ll");
    static STRUCT_IF_C BFu31i_BFs31ll_BFu31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31ll_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31ll_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31i_BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31ll_BFu31i_BFu31ll, BFu31i_BFs31ll_BFu31i_BFu31ll)
//============================================================================


struct  BFu31i_BFs31ll_BFu31ll  {
  unsigned int v1:31;
  signed __tsi64 v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFs31ll_BFu31ll) C1{ Fi:31 FL:31 FL:31}



static void Test_BFu31i_BFs31ll_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFs31ll_BFu31ll");
    static STRUCT_IF_C BFu31i_BFs31ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFs31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31ll_BFu31ll, BFu31i_BFs31ll_BFu31ll)
//============================================================================


struct  BFu31i_BFs31ll_BFu31ll_BFs31i  {
  unsigned int v1:31;
  signed __tsi64 v2:31;
  __tsu64 v3:31;
  signed int v4:31;
};
//SIG(1 BFu31i_BFs31ll_BFu31ll_BFs31i) C1{ Fi:31 FL:31 FL:31 Fi:31}



static void Test_BFu31i_BFs31ll_BFu31ll_BFs31i()
{
  {
    init_simple_test("BFu31i_BFs31ll_BFu31ll_BFs31i");
    static STRUCT_IF_C BFu31i_BFs31ll_BFu31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31ll_BFu31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31ll_BFu31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31i_BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFu31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31ll_BFu31ll_BFs31i, BFu31i_BFs31ll_BFu31ll_BFs31i)
//============================================================================


struct  BFu31i_BFs31ll_BFu31ll_BFs31ll  {
  unsigned int v1:31;
  signed __tsi64 v2:31;
  __tsu64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31i_BFs31ll_BFu31ll_BFs31ll) C1{ Fi:31 FL:31 FL:31 FL:31}



static void Test_BFu31i_BFs31ll_BFu31ll_BFs31ll()
{
  {
    init_simple_test("BFu31i_BFs31ll_BFu31ll_BFs31ll");
    static STRUCT_IF_C BFu31i_BFs31ll_BFu31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31ll_BFu31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31ll_BFu31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31i_BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFu31i_BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFu31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31ll_BFu31ll_BFs31ll, BFu31i_BFs31ll_BFu31ll_BFs31ll)
//============================================================================


struct  BFu31i_BFs31ll_BFu31ll_BFu31i  {
  unsigned int v1:31;
  signed __tsi64 v2:31;
  __tsu64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31i_BFs31ll_BFu31ll_BFu31i) C1{ Fi:31 FL:31 FL:31 Fi:31}



static void Test_BFu31i_BFs31ll_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFu31i_BFs31ll_BFu31ll_BFu31i");
    static STRUCT_IF_C BFu31i_BFs31ll_BFu31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31ll_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31ll_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31i_BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31ll_BFu31ll_BFu31i, BFu31i_BFs31ll_BFu31ll_BFu31i)
//============================================================================


struct  BFu31i_BFs31ll_BFu31ll_BFu31ll  {
  unsigned int v1:31;
  signed __tsi64 v2:31;
  __tsu64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31i_BFs31ll_BFu31ll_BFu31ll) C1{ Fi:31 FL:31 FL:31 FL:31}



static void Test_BFu31i_BFs31ll_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFs31ll_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFu31i_BFs31ll_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFs31ll_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFs31ll_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31i_BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31i_BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFu31i_BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_ull(1LL<<30), "BFu31i_BFs31ll_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFs31ll_BFu31ll_BFu31ll, BFu31i_BFs31ll_BFu31ll_BFu31ll)
//============================================================================


struct  BFu31i_BFu15i  {
  unsigned int v1:31;
  unsigned int v2:15;
};
//SIG(1 BFu31i_BFu15i) C1{ Fi:31 Fi:15}



static void Test_BFu31i_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu15i");
    static STRUCT_IF_C BFu31i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i, BFu31i_BFu15i)
//============================================================================


struct  BFu31i_BFu15i_BFu15i  {
  unsigned int v1:31;
  unsigned int v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu31i_BFu15i_BFu15i) C1{ Fi:31 Fi:15 Fi:15}



static void Test_BFu31i_BFu15i_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu15i_BFu15i");
    static STRUCT_IF_C BFu31i_BFu15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 5, 7, 15, 1, "BFu31i_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 5, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_BFu15i, BFu31i_BFu15i_BFu15i)
//============================================================================


struct  BFu31i_BFu15i_BFu15ll  {
  unsigned int v1:31;
  unsigned int v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_BFu15i_BFu15ll) C1{ Fi:31 Fi:15 FL:15}



static void Test_BFu31i_BFu15i_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu15i_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 5, 7, 15, 1, "BFu31i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 5, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_BFu15ll, BFu31i_BFu15i_BFu15ll)
//============================================================================


struct  BFu31i_BFu15i_BFu15s  {
  unsigned int v1:31;
  unsigned int v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu31i_BFu15i_BFu15s) C1{ Fi:31 Fi:15 Fs:15}



static void Test_BFu31i_BFu15i_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu15i_BFu15s");
    static STRUCT_IF_C BFu31i_BFu15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_BFu15s, BFu31i_BFu15i_BFu15s)
//============================================================================


struct  BFu31i_BFu15i_BFu16i  {
  unsigned int v1:31;
  unsigned int v2:15;
  unsigned int v3:16;
};
//SIG(1 BFu31i_BFu15i_BFu16i) C1{ Fi:31 Fi:15 Fi:16}



static void Test_BFu31i_BFu15i_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu15i_BFu16i");
    static STRUCT_IF_C BFu31i_BFu15i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 5, 7, 16, 1, "BFu31i_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 5, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu15i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_BFu16i, BFu31i_BFu15i_BFu16i)
//============================================================================


struct  BFu31i_BFu15i_BFu16ll  {
  unsigned int v1:31;
  unsigned int v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_BFu15i_BFu16ll) C1{ Fi:31 Fi:15 FL:16}



static void Test_BFu31i_BFu15i_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu15i_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu15i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 5, 7, 16, 1, "BFu31i_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 5, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu15i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_BFu16ll, BFu31i_BFu15i_BFu16ll)
//============================================================================


struct  BFu31i_BFu15i_BFu16s  {
  unsigned int v1:31;
  unsigned int v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu31i_BFu15i_BFu16s) C1{ Fi:31 Fi:15 Fs:16}



static void Test_BFu31i_BFu15i_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu15i_BFu16s");
    static STRUCT_IF_C BFu31i_BFu15i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu15i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_BFu16s, BFu31i_BFu15i_BFu16s)
//============================================================================


struct  BFu31i_BFu15i_BFu17i  {
  unsigned int v1:31;
  unsigned int v2:15;
  unsigned int v3:17;
};
//SIG(1 BFu31i_BFu15i_BFu17i) C1{ Fi:31 Fi:15 Fi:17}



static void Test_BFu31i_BFu15i_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu15i_BFu17i");
    static STRUCT_IF_C BFu31i_BFu15i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 5, 7, 17, 1, "BFu31i_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 5, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu15i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_BFu17i, BFu31i_BFu15i_BFu17i)
//============================================================================


struct  BFu31i_BFu15i_BFu17ll  {
  unsigned int v1:31;
  unsigned int v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_BFu15i_BFu17ll) C1{ Fi:31 Fi:15 FL:17}



static void Test_BFu31i_BFu15i_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu15i_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu15i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 5, 7, 17, 1, "BFu31i_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 5, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu15i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_BFu17ll, BFu31i_BFu15i_BFu17ll)
//============================================================================


struct  BFu31i_BFu15i_BFu1c  {
  unsigned int v1:31;
  unsigned int v2:15;
  unsigned char v3:1;
};
//SIG(1 BFu31i_BFu15i_BFu1c) C1{ Fi:31 Fi:15 Fc:1}



static void Test_BFu31i_BFu15i_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu15i_BFu1c");
    static STRUCT_IF_C BFu31i_BFu15i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu1c");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu31i_BFu15i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_BFu1c, BFu31i_BFu15i_BFu1c)
//============================================================================


struct  BFu31i_BFu15i_BFu1i  {
  unsigned int v1:31;
  unsigned int v2:15;
  unsigned int v3:1;
};
//SIG(1 BFu31i_BFu15i_BFu1i) C1{ Fi:31 Fi:15 Fi:1}



static void Test_BFu31i_BFu15i_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu15i_BFu1i");
    static STRUCT_IF_C BFu31i_BFu15i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu1i");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu31i_BFu15i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_BFu1i, BFu31i_BFu15i_BFu1i)
//============================================================================


struct  BFu31i_BFu15i_BFu1ll  {
  unsigned int v1:31;
  unsigned int v2:15;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_BFu15i_BFu1ll) C1{ Fi:31 Fi:15 FL:1}



static void Test_BFu31i_BFu15i_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu15i_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu15i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu1ll");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu31i_BFu15i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_BFu1ll, BFu31i_BFu15i_BFu1ll)
//============================================================================


struct  BFu31i_BFu15i_BFu1s  {
  unsigned int v1:31;
  unsigned int v2:15;
  unsigned short v3:1;
};
//SIG(1 BFu31i_BFu15i_BFu1s) C1{ Fi:31 Fi:15 Fs:1}



static void Test_BFu31i_BFu15i_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu15i_BFu1s");
    static STRUCT_IF_C BFu31i_BFu15i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu1s");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu31i_BFu15i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_BFu1s, BFu31i_BFu15i_BFu1s)
//============================================================================


struct  BFu31i_BFu15i_BFu31i  {
  unsigned int v1:31;
  unsigned int v2:15;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFu15i_BFu31i) C1{ Fi:31 Fi:15 Fi:31}



static void Test_BFu31i_BFu15i_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu15i_BFu31i");
    static STRUCT_IF_C BFu31i_BFu15i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu15i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_BFu31i, BFu31i_BFu15i_BFu31i)
//============================================================================


struct  BFu31i_BFu15i_BFu31ll  {
  unsigned int v1:31;
  unsigned int v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFu15i_BFu31ll) C1{ Fi:31 Fi:15 FL:31}



static void Test_BFu31i_BFu15i_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu15i_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu15i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu15i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 31, 1, "BFu31i_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_BFu31ll, BFu31i_BFu15i_BFu31ll)
//============================================================================


struct  BFu31i_BFu15i_BFu32i  {
  unsigned int v1:31;
  unsigned int v2:15;
  unsigned int v3:32;
};
//SIG(1 BFu31i_BFu15i_BFu32i) C1{ Fi:31 Fi:15 Fi:32}



static void Test_BFu31i_BFu15i_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu15i_BFu32i");
    static STRUCT_IF_C BFu31i_BFu15i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu15i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu15i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_BFu32i, BFu31i_BFu15i_BFu32i)
//============================================================================


struct  BFu31i_BFu15i_BFu32ll  {
  unsigned int v1:31;
  unsigned int v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_BFu15i_BFu32ll) C1{ Fi:31 Fi:15 FL:32}



static void Test_BFu31i_BFu15i_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu15i_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu15i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu15i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 32, 1, "BFu31i_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu31i_BFu15i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_BFu32ll, BFu31i_BFu15i_BFu32ll)
//============================================================================


struct  BFu31i_BFu15i_BFu33  {
  unsigned int v1:31;
  unsigned int v2:15;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_BFu15i_BFu33) C1{ Fi:31 Fi:15 FL:33}



static void Test_BFu31i_BFu15i_BFu33()
{
  {
    init_simple_test("BFu31i_BFu15i_BFu33");
    static STRUCT_IF_C BFu31i_BFu15i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu15i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 33, 1, "BFu31i_BFu15i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu31i_BFu15i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_BFu33, BFu31i_BFu15i_BFu33)
//============================================================================


struct  BFu31i_BFu15i_BFu7c  {
  unsigned int v1:31;
  unsigned int v2:15;
  unsigned char v3:7;
};
//SIG(1 BFu31i_BFu15i_BFu7c) C1{ Fi:31 Fi:15 Fc:7}



static void Test_BFu31i_BFu15i_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu15i_BFu7c");
    static STRUCT_IF_C BFu31i_BFu15i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31i_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu15i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_BFu7c, BFu31i_BFu15i_BFu7c)
//============================================================================


struct  BFu31i_BFu15i_BFu7i  {
  unsigned int v1:31;
  unsigned int v2:15;
  unsigned int v3:7;
};
//SIG(1 BFu31i_BFu15i_BFu7i) C1{ Fi:31 Fi:15 Fi:7}



static void Test_BFu31i_BFu15i_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu15i_BFu7i");
    static STRUCT_IF_C BFu31i_BFu15i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 5, 7, 7, 1, "BFu31i_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 5, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu15i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_BFu7i, BFu31i_BFu15i_BFu7i)
//============================================================================


struct  BFu31i_BFu15i_BFu7ll  {
  unsigned int v1:31;
  unsigned int v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_BFu15i_BFu7ll) C1{ Fi:31 Fi:15 FL:7}



static void Test_BFu31i_BFu15i_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu15i_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu15i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu7ll");
    set_bf_and_test(lv, v3, 5, 7, 7, 1, "BFu31i_BFu15i_BFu7ll");
    set_bf_and_test(lv, v3, 5, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu15i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_BFu7ll, BFu31i_BFu15i_BFu7ll)
//============================================================================


struct  BFu31i_BFu15i_BFu7s  {
  unsigned int v1:31;
  unsigned int v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu31i_BFu15i_BFu7s) C1{ Fi:31 Fi:15 Fs:7}



static void Test_BFu31i_BFu15i_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu15i_BFu7s");
    static STRUCT_IF_C BFu31i_BFu15i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31i_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu15i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_BFu7s, BFu31i_BFu15i_BFu7s)
//============================================================================


struct  BFu31i_BFu15i_BFu8c  {
  unsigned int v1:31;
  unsigned int v2:15;
  unsigned char v3:8;
};
//SIG(1 BFu31i_BFu15i_BFu8c) C1{ Fi:31 Fi:15 Fc:8}



static void Test_BFu31i_BFu15i_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu15i_BFu8c");
    static STRUCT_IF_C BFu31i_BFu15i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu15i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_BFu8c, BFu31i_BFu15i_BFu8c)
//============================================================================


struct  BFu31i_BFu15i_BFu8i  {
  unsigned int v1:31;
  unsigned int v2:15;
  unsigned int v3:8;
};
//SIG(1 BFu31i_BFu15i_BFu8i) C1{ Fi:31 Fi:15 Fi:8}



static void Test_BFu31i_BFu15i_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu15i_BFu8i");
    static STRUCT_IF_C BFu31i_BFu15i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 5, 7, 8, 1, "BFu31i_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 5, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu15i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_BFu8i, BFu31i_BFu15i_BFu8i)
//============================================================================


struct  BFu31i_BFu15i_BFu8ll  {
  unsigned int v1:31;
  unsigned int v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_BFu15i_BFu8ll) C1{ Fi:31 Fi:15 FL:8}



static void Test_BFu31i_BFu15i_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu15i_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu15i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu8ll");
    set_bf_and_test(lv, v3, 5, 7, 8, 1, "BFu31i_BFu15i_BFu8ll");
    set_bf_and_test(lv, v3, 5, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu15i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_BFu8ll, BFu31i_BFu15i_BFu8ll)
//============================================================================


struct  BFu31i_BFu15i_BFu8s  {
  unsigned int v1:31;
  unsigned int v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu31i_BFu15i_BFu8s) C1{ Fi:31 Fi:15 Fs:8}



static void Test_BFu31i_BFu15i_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu15i_BFu8s");
    static STRUCT_IF_C BFu31i_BFu15i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu15i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_BFu8s, BFu31i_BFu15i_BFu8s)
//============================================================================


struct  BFu31i_BFu15i_BFu9i  {
  unsigned int v1:31;
  unsigned int v2:15;
  unsigned int v3:9;
};
//SIG(1 BFu31i_BFu15i_BFu9i) C1{ Fi:31 Fi:15 Fi:9}



static void Test_BFu31i_BFu15i_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu15i_BFu9i");
    static STRUCT_IF_C BFu31i_BFu15i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 5, 7, 9, 1, "BFu31i_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 5, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu15i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_BFu9i, BFu31i_BFu15i_BFu9i)
//============================================================================


struct  BFu31i_BFu15i_BFu9ll  {
  unsigned int v1:31;
  unsigned int v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_BFu15i_BFu9ll) C1{ Fi:31 Fi:15 FL:9}



static void Test_BFu31i_BFu15i_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu15i_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu15i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 5, 7, 9, 1, "BFu31i_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 5, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu15i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_BFu9ll, BFu31i_BFu15i_BFu9ll)
//============================================================================


struct  BFu31i_BFu15i_BFu9s  {
  unsigned int v1:31;
  unsigned int v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu31i_BFu15i_BFu9s) C1{ Fi:31 Fi:15 Fs:9}



static void Test_BFu31i_BFu15i_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu15i_BFu9s");
    static STRUCT_IF_C BFu31i_BFu15i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31i_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu15i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_BFu9s, BFu31i_BFu15i_BFu9s)
//============================================================================


struct  BFu31i_BFu15i_C  {
  unsigned int v1:31;
  unsigned int v2:15;
  char v3;
};
//SIG(1 BFu31i_BFu15i_C) C1{ Fi:31 Fi:15 Fc}



static void Test_BFu31i_BFu15i_C()
{
  {
    init_simple_test("BFu31i_BFu15i_C");
    static STRUCT_IF_C BFu31i_BFu15i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15i_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_C");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_C");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_C");
    check_field_offset(lv, v3, 6, "BFu31i_BFu15i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_C, BFu31i_BFu15i_C)
//============================================================================


struct  BFu31i_BFu15i_D  {
  unsigned int v1:31;
  unsigned int v2:15;
  double v3;
};
//SIG(1 BFu31i_BFu15i_D) C1{ Fi:31 Fi:15 FL}



static void Test_BFu31i_BFu15i_D()
{
  {
    init_simple_test("BFu31i_BFu15i_D");
    static STRUCT_IF_C BFu31i_BFu15i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu15i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15i_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_D");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_D");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_D");
    check_field_offset(lv, v3, 8, "BFu31i_BFu15i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_D, BFu31i_BFu15i_D)
//============================================================================


struct  BFu31i_BFu15i_F  {
  unsigned int v1:31;
  unsigned int v2:15;
  float v3;
};
//SIG(1 BFu31i_BFu15i_F) C1{ Fi:31 Fi:15 Fi}



static void Test_BFu31i_BFu15i_F()
{
  {
    init_simple_test("BFu31i_BFu15i_F");
    static STRUCT_IF_C BFu31i_BFu15i_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu15i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15i_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_F");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_F");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_F");
    check_field_offset(lv, v3, 8, "BFu31i_BFu15i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_F, BFu31i_BFu15i_F)
//============================================================================


struct  BFu31i_BFu15i_I  {
  unsigned int v1:31;
  unsigned int v2:15;
  int v3;
};
//SIG(1 BFu31i_BFu15i_I) C1{ Fi:31 Fi:15 Fi}



static void Test_BFu31i_BFu15i_I()
{
  {
    init_simple_test("BFu31i_BFu15i_I");
    static STRUCT_IF_C BFu31i_BFu15i_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu15i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15i_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_I");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_I");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_I");
    check_field_offset(lv, v3, 8, "BFu31i_BFu15i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_I, BFu31i_BFu15i_I)
//============================================================================


struct  BFu31i_BFu15i_Ip  {
  unsigned int v1:31;
  unsigned int v2:15;
  int *v3;
};
//SIG(1 BFu31i_BFu15i_Ip) C1{ Fi:31 Fi:15 Fp}



static void Test_BFu31i_BFu15i_Ip()
{
  {
    init_simple_test("BFu31i_BFu15i_Ip");
    static STRUCT_IF_C BFu31i_BFu15i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu15i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_Ip");
    check_field_offset(lv, v3, 8, "BFu31i_BFu15i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_Ip, BFu31i_BFu15i_Ip)
//============================================================================


struct  BFu31i_BFu15i_L  {
  unsigned int v1:31;
  unsigned int v2:15;
  __tsi64 v3;
};
//SIG(1 BFu31i_BFu15i_L) C1{ Fi:31 Fi:15 FL}



static void Test_BFu31i_BFu15i_L()
{
  {
    init_simple_test("BFu31i_BFu15i_L");
    static STRUCT_IF_C BFu31i_BFu15i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu15i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15i_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_L");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_L");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_L");
    check_field_offset(lv, v3, 8, "BFu31i_BFu15i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_L, BFu31i_BFu15i_L)
//============================================================================


struct  BFu31i_BFu15i_S  {
  unsigned int v1:31;
  unsigned int v2:15;
  short v3;
};
//SIG(1 BFu31i_BFu15i_S) C1{ Fi:31 Fi:15 Fs}



static void Test_BFu31i_BFu15i_S()
{
  {
    init_simple_test("BFu31i_BFu15i_S");
    static STRUCT_IF_C BFu31i_BFu15i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15i_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_S");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_S");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_S");
    check_field_offset(lv, v3, 6, "BFu31i_BFu15i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_S, BFu31i_BFu15i_S)
//============================================================================


struct  BFu31i_BFu15i_Uc  {
  unsigned int v1:31;
  unsigned int v2:15;
  unsigned char v3;
};
//SIG(1 BFu31i_BFu15i_Uc) C1{ Fi:31 Fi:15 Fc}



static void Test_BFu31i_BFu15i_Uc()
{
  {
    init_simple_test("BFu31i_BFu15i_Uc");
    static STRUCT_IF_C BFu31i_BFu15i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_Uc");
    check_field_offset(lv, v3, 6, "BFu31i_BFu15i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_Uc, BFu31i_BFu15i_Uc)
//============================================================================


struct  BFu31i_BFu15i_Ui  {
  unsigned int v1:31;
  unsigned int v2:15;
  unsigned int v3;
};
//SIG(1 BFu31i_BFu15i_Ui) C1{ Fi:31 Fi:15 Fi}



static void Test_BFu31i_BFu15i_Ui()
{
  {
    init_simple_test("BFu31i_BFu15i_Ui");
    static STRUCT_IF_C BFu31i_BFu15i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu15i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_Ui");
    check_field_offset(lv, v3, 8, "BFu31i_BFu15i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_Ui, BFu31i_BFu15i_Ui)
//============================================================================


struct  BFu31i_BFu15i_Ul  {
  unsigned int v1:31;
  unsigned int v2:15;
  __tsu64 v3;
};
//SIG(1 BFu31i_BFu15i_Ul) C1{ Fi:31 Fi:15 FL}



static void Test_BFu31i_BFu15i_Ul()
{
  {
    init_simple_test("BFu31i_BFu15i_Ul");
    static STRUCT_IF_C BFu31i_BFu15i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu15i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_Ul");
    check_field_offset(lv, v3, 8, "BFu31i_BFu15i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_Ul, BFu31i_BFu15i_Ul)
//============================================================================


struct  BFu31i_BFu15i_Us  {
  unsigned int v1:31;
  unsigned int v2:15;
  unsigned short v3;
};
//SIG(1 BFu31i_BFu15i_Us) C1{ Fi:31 Fi:15 Fs}



static void Test_BFu31i_BFu15i_Us()
{
  {
    init_simple_test("BFu31i_BFu15i_Us");
    static STRUCT_IF_C BFu31i_BFu15i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_Us");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_Us");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_Us");
    check_field_offset(lv, v3, 6, "BFu31i_BFu15i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_Us, BFu31i_BFu15i_Us)
//============================================================================


struct  BFu31i_BFu15i_Vp  {
  unsigned int v1:31;
  unsigned int v2:15;
  void *v3;
};
//SIG(1 BFu31i_BFu15i_Vp) C1{ Fi:31 Fi:15 Fp}



static void Test_BFu31i_BFu15i_Vp()
{
  {
    init_simple_test("BFu31i_BFu15i_Vp");
    static STRUCT_IF_C BFu31i_BFu15i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu15i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_Vp");
    check_field_offset(lv, v3, 8, "BFu31i_BFu15i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15i_Vp, BFu31i_BFu15i_Vp)
//============================================================================


struct  BFu31i_BFu15ll  {
  unsigned int v1:31;
  __tsu64 v2:15;
};
//SIG(1 BFu31i_BFu15ll) C1{ Fi:31 FL:15}



static void Test_BFu31i_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll, BFu31i_BFu15ll)
//============================================================================


struct  BFu31i_BFu15ll_BFu15i  {
  unsigned int v1:31;
  __tsu64 v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu31i_BFu15ll_BFu15i) C1{ Fi:31 FL:15 Fi:15}



static void Test_BFu31i_BFu15ll_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu15ll_BFu15i");
    static STRUCT_IF_C BFu31i_BFu15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 5, 6, 15, 1, "BFu31i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 5, 6, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_BFu15i, BFu31i_BFu15ll_BFu15i)
//============================================================================


struct  BFu31i_BFu15ll_BFu15ll  {
  unsigned int v1:31;
  __tsu64 v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_BFu15ll_BFu15ll) C1{ Fi:31 FL:15 FL:15}



static void Test_BFu31i_BFu15ll_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu15ll_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 5, 6, 15, 1, "BFu31i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 5, 6, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_BFu15ll, BFu31i_BFu15ll_BFu15ll)
//============================================================================


struct  BFu31i_BFu15ll_BFu15s  {
  unsigned int v1:31;
  __tsu64 v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu31i_BFu15ll_BFu15s) C1{ Fi:31 FL:15 Fs:15}



static void Test_BFu31i_BFu15ll_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu15ll_BFu15s");
    static STRUCT_IF_C BFu31i_BFu15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_BFu15s, BFu31i_BFu15ll_BFu15s)
//============================================================================


struct  BFu31i_BFu15ll_BFu16i  {
  unsigned int v1:31;
  __tsu64 v2:15;
  unsigned int v3:16;
};
//SIG(1 BFu31i_BFu15ll_BFu16i) C1{ Fi:31 FL:15 Fi:16}



static void Test_BFu31i_BFu15ll_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu15ll_BFu16i");
    static STRUCT_IF_C BFu31i_BFu15ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu16i");
    set_bf_and_test(lv, v3, 5, 6, 16, 1, "BFu31i_BFu15ll_BFu16i");
    set_bf_and_test(lv, v3, 5, 6, 16, hide_ull(1LL<<15), "BFu31i_BFu15ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_BFu16i, BFu31i_BFu15ll_BFu16i)
//============================================================================


struct  BFu31i_BFu15ll_BFu16ll  {
  unsigned int v1:31;
  __tsu64 v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_BFu15ll_BFu16ll) C1{ Fi:31 FL:15 FL:16}



static void Test_BFu31i_BFu15ll_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu15ll_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu15ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v3, 5, 6, 16, 1, "BFu31i_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v3, 5, 6, 16, hide_ull(1LL<<15), "BFu31i_BFu15ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_BFu16ll, BFu31i_BFu15ll_BFu16ll)
//============================================================================


struct  BFu31i_BFu15ll_BFu16s  {
  unsigned int v1:31;
  __tsu64 v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu31i_BFu15ll_BFu16s) C1{ Fi:31 FL:15 Fs:16}



static void Test_BFu31i_BFu15ll_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu15ll_BFu16s");
    static STRUCT_IF_C BFu31i_BFu15ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_BFu15ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu15ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_BFu16s, BFu31i_BFu15ll_BFu16s)
//============================================================================


struct  BFu31i_BFu15ll_BFu17i  {
  unsigned int v1:31;
  __tsu64 v2:15;
  unsigned int v3:17;
};
//SIG(1 BFu31i_BFu15ll_BFu17i) C1{ Fi:31 FL:15 Fi:17}



static void Test_BFu31i_BFu15ll_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu15ll_BFu17i");
    static STRUCT_IF_C BFu31i_BFu15ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu17i");
    set_bf_and_test(lv, v3, 5, 6, 17, 1, "BFu31i_BFu15ll_BFu17i");
    set_bf_and_test(lv, v3, 5, 6, 17, hide_ull(1LL<<16), "BFu31i_BFu15ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_BFu17i, BFu31i_BFu15ll_BFu17i)
//============================================================================


struct  BFu31i_BFu15ll_BFu17ll  {
  unsigned int v1:31;
  __tsu64 v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_BFu15ll_BFu17ll) C1{ Fi:31 FL:15 FL:17}



static void Test_BFu31i_BFu15ll_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu15ll_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu15ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v3, 5, 6, 17, 1, "BFu31i_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v3, 5, 6, 17, hide_ull(1LL<<16), "BFu31i_BFu15ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_BFu17ll, BFu31i_BFu15ll_BFu17ll)
//============================================================================


struct  BFu31i_BFu15ll_BFu1c  {
  unsigned int v1:31;
  __tsu64 v2:15;
  unsigned char v3:1;
};
//SIG(1 BFu31i_BFu15ll_BFu1c) C1{ Fi:31 FL:15 Fc:1}



static void Test_BFu31i_BFu15ll_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu15ll_BFu1c");
    static STRUCT_IF_C BFu31i_BFu15ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu1c");
    set_bf_and_test(lv, v3, 5, 6, 1, 1, "BFu31i_BFu15ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_BFu1c, BFu31i_BFu15ll_BFu1c)
//============================================================================


struct  BFu31i_BFu15ll_BFu1i  {
  unsigned int v1:31;
  __tsu64 v2:15;
  unsigned int v3:1;
};
//SIG(1 BFu31i_BFu15ll_BFu1i) C1{ Fi:31 FL:15 Fi:1}



static void Test_BFu31i_BFu15ll_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu15ll_BFu1i");
    static STRUCT_IF_C BFu31i_BFu15ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu1i");
    set_bf_and_test(lv, v3, 5, 6, 1, 1, "BFu31i_BFu15ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_BFu1i, BFu31i_BFu15ll_BFu1i)
//============================================================================


struct  BFu31i_BFu15ll_BFu1ll  {
  unsigned int v1:31;
  __tsu64 v2:15;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_BFu15ll_BFu1ll) C1{ Fi:31 FL:15 FL:1}



static void Test_BFu31i_BFu15ll_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu15ll_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu15ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v3, 5, 6, 1, 1, "BFu31i_BFu15ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_BFu1ll, BFu31i_BFu15ll_BFu1ll)
//============================================================================


struct  BFu31i_BFu15ll_BFu1s  {
  unsigned int v1:31;
  __tsu64 v2:15;
  unsigned short v3:1;
};
//SIG(1 BFu31i_BFu15ll_BFu1s) C1{ Fi:31 FL:15 Fs:1}



static void Test_BFu31i_BFu15ll_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu15ll_BFu1s");
    static STRUCT_IF_C BFu31i_BFu15ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu1s");
    set_bf_and_test(lv, v3, 5, 6, 1, 1, "BFu31i_BFu15ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_BFu1s, BFu31i_BFu15ll_BFu1s)
//============================================================================


struct  BFu31i_BFu15ll_BFu31i  {
  unsigned int v1:31;
  __tsu64 v2:15;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFu15ll_BFu31i) C1{ Fi:31 FL:15 Fi:31}



static void Test_BFu31i_BFu15ll_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu15ll_BFu31i");
    static STRUCT_IF_C BFu31i_BFu15ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu15ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu15ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_BFu31i, BFu31i_BFu15ll_BFu31i)
//============================================================================


struct  BFu31i_BFu15ll_BFu31ll  {
  unsigned int v1:31;
  __tsu64 v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFu15ll_BFu31ll) C1{ Fi:31 FL:15 FL:31}



static void Test_BFu31i_BFu15ll_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu15ll_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu15ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu15ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,6), 31, 1, "BFu31i_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_BFu31ll, BFu31i_BFu15ll_BFu31ll)
//============================================================================


struct  BFu31i_BFu15ll_BFu32i  {
  unsigned int v1:31;
  __tsu64 v2:15;
  unsigned int v3:32;
};
//SIG(1 BFu31i_BFu15ll_BFu32i) C1{ Fi:31 FL:15 Fi:32}



static void Test_BFu31i_BFu15ll_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu15ll_BFu32i");
    static STRUCT_IF_C BFu31i_BFu15ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu15ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_BFu15ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu15ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_BFu32i, BFu31i_BFu15ll_BFu32i)
//============================================================================


struct  BFu31i_BFu15ll_BFu32ll  {
  unsigned int v1:31;
  __tsu64 v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_BFu15ll_BFu32ll) C1{ Fi:31 FL:15 FL:32}



static void Test_BFu31i_BFu15ll_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu15ll_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu15ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu15ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,6), 32, 1, "BFu31i_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,6), 32, hide_ull(1LL<<31), "BFu31i_BFu15ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_BFu32ll, BFu31i_BFu15ll_BFu32ll)
//============================================================================


struct  BFu31i_BFu15ll_BFu33  {
  unsigned int v1:31;
  __tsu64 v2:15;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_BFu15ll_BFu33) C1{ Fi:31 FL:15 FL:33}



static void Test_BFu31i_BFu15ll_BFu33()
{
  {
    init_simple_test("BFu31i_BFu15ll_BFu33");
    static STRUCT_IF_C BFu31i_BFu15ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu15ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,6), 33, 1, "BFu31i_BFu15ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,6), 33, hide_ull(1LL<<32), "BFu31i_BFu15ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_BFu33, BFu31i_BFu15ll_BFu33)
//============================================================================


struct  BFu31i_BFu15ll_BFu7c  {
  unsigned int v1:31;
  __tsu64 v2:15;
  unsigned char v3:7;
};
//SIG(1 BFu31i_BFu15ll_BFu7c) C1{ Fi:31 FL:15 Fc:7}



static void Test_BFu31i_BFu15ll_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu15ll_BFu7c");
    static STRUCT_IF_C BFu31i_BFu15ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31i_BFu15ll_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu15ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_BFu7c, BFu31i_BFu15ll_BFu7c)
//============================================================================


struct  BFu31i_BFu15ll_BFu7i  {
  unsigned int v1:31;
  __tsu64 v2:15;
  unsigned int v3:7;
};
//SIG(1 BFu31i_BFu15ll_BFu7i) C1{ Fi:31 FL:15 Fi:7}



static void Test_BFu31i_BFu15ll_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu15ll_BFu7i");
    static STRUCT_IF_C BFu31i_BFu15ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu7i");
    set_bf_and_test(lv, v3, 5, 6, 7, 1, "BFu31i_BFu15ll_BFu7i");
    set_bf_and_test(lv, v3, 5, 6, 7, hide_ull(1LL<<6), "BFu31i_BFu15ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_BFu7i, BFu31i_BFu15ll_BFu7i)
//============================================================================


struct  BFu31i_BFu15ll_BFu7ll  {
  unsigned int v1:31;
  __tsu64 v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_BFu15ll_BFu7ll) C1{ Fi:31 FL:15 FL:7}



static void Test_BFu31i_BFu15ll_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu15ll_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu15ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v3, 5, 6, 7, 1, "BFu31i_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v3, 5, 6, 7, hide_ull(1LL<<6), "BFu31i_BFu15ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_BFu7ll, BFu31i_BFu15ll_BFu7ll)
//============================================================================


struct  BFu31i_BFu15ll_BFu7s  {
  unsigned int v1:31;
  __tsu64 v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu31i_BFu15ll_BFu7s) C1{ Fi:31 FL:15 Fs:7}



static void Test_BFu31i_BFu15ll_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu15ll_BFu7s");
    static STRUCT_IF_C BFu31i_BFu15ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31i_BFu15ll_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu15ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_BFu7s, BFu31i_BFu15ll_BFu7s)
//============================================================================


struct  BFu31i_BFu15ll_BFu8c  {
  unsigned int v1:31;
  __tsu64 v2:15;
  unsigned char v3:8;
};
//SIG(1 BFu31i_BFu15ll_BFu8c) C1{ Fi:31 FL:15 Fc:8}



static void Test_BFu31i_BFu15ll_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu15ll_BFu8c");
    static STRUCT_IF_C BFu31i_BFu15ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_BFu15ll_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu15ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_BFu8c, BFu31i_BFu15ll_BFu8c)
//============================================================================


struct  BFu31i_BFu15ll_BFu8i  {
  unsigned int v1:31;
  __tsu64 v2:15;
  unsigned int v3:8;
};
//SIG(1 BFu31i_BFu15ll_BFu8i) C1{ Fi:31 FL:15 Fi:8}



static void Test_BFu31i_BFu15ll_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu15ll_BFu8i");
    static STRUCT_IF_C BFu31i_BFu15ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu8i");
    set_bf_and_test(lv, v3, 5, 6, 8, 1, "BFu31i_BFu15ll_BFu8i");
    set_bf_and_test(lv, v3, 5, 6, 8, hide_ull(1LL<<7), "BFu31i_BFu15ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_BFu8i, BFu31i_BFu15ll_BFu8i)
//============================================================================


struct  BFu31i_BFu15ll_BFu8ll  {
  unsigned int v1:31;
  __tsu64 v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_BFu15ll_BFu8ll) C1{ Fi:31 FL:15 FL:8}



static void Test_BFu31i_BFu15ll_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu15ll_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu15ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v3, 5, 6, 8, 1, "BFu31i_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v3, 5, 6, 8, hide_ull(1LL<<7), "BFu31i_BFu15ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_BFu8ll, BFu31i_BFu15ll_BFu8ll)
//============================================================================


struct  BFu31i_BFu15ll_BFu8s  {
  unsigned int v1:31;
  __tsu64 v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu31i_BFu15ll_BFu8s) C1{ Fi:31 FL:15 Fs:8}



static void Test_BFu31i_BFu15ll_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu15ll_BFu8s");
    static STRUCT_IF_C BFu31i_BFu15ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_BFu15ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu15ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_BFu8s, BFu31i_BFu15ll_BFu8s)
//============================================================================


struct  BFu31i_BFu15ll_BFu9i  {
  unsigned int v1:31;
  __tsu64 v2:15;
  unsigned int v3:9;
};
//SIG(1 BFu31i_BFu15ll_BFu9i) C1{ Fi:31 FL:15 Fi:9}



static void Test_BFu31i_BFu15ll_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu15ll_BFu9i");
    static STRUCT_IF_C BFu31i_BFu15ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu9i");
    set_bf_and_test(lv, v3, 5, 6, 9, 1, "BFu31i_BFu15ll_BFu9i");
    set_bf_and_test(lv, v3, 5, 6, 9, hide_ull(1LL<<8), "BFu31i_BFu15ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_BFu9i, BFu31i_BFu15ll_BFu9i)
//============================================================================


struct  BFu31i_BFu15ll_BFu9ll  {
  unsigned int v1:31;
  __tsu64 v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_BFu15ll_BFu9ll) C1{ Fi:31 FL:15 FL:9}



static void Test_BFu31i_BFu15ll_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu15ll_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu15ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v3, 5, 6, 9, 1, "BFu31i_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v3, 5, 6, 9, hide_ull(1LL<<8), "BFu31i_BFu15ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_BFu9ll, BFu31i_BFu15ll_BFu9ll)
//============================================================================


struct  BFu31i_BFu15ll_BFu9s  {
  unsigned int v1:31;
  __tsu64 v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu31i_BFu15ll_BFu9s) C1{ Fi:31 FL:15 Fs:9}



static void Test_BFu31i_BFu15ll_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu15ll_BFu9s");
    static STRUCT_IF_C BFu31i_BFu15ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31i_BFu15ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu15ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_BFu9s, BFu31i_BFu15ll_BFu9s)
//============================================================================


struct  BFu31i_BFu15ll_C  {
  unsigned int v1:31;
  __tsu64 v2:15;
  char v3;
};
//SIG(1 BFu31i_BFu15ll_C) C1{ Fi:31 FL:15 Fc}



static void Test_BFu31i_BFu15ll_C()
{
  {
    init_simple_test("BFu31i_BFu15ll_C");
    static STRUCT_IF_C BFu31i_BFu15ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_C");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_C");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_C");
    check_field_offset(lv, v3, 6, "BFu31i_BFu15ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_C, BFu31i_BFu15ll_C)
//============================================================================


struct  BFu31i_BFu15ll_D  {
  unsigned int v1:31;
  __tsu64 v2:15;
  double v3;
};
//SIG(1 BFu31i_BFu15ll_D) C1{ Fi:31 FL:15 FL}



static void Test_BFu31i_BFu15ll_D()
{
  {
    init_simple_test("BFu31i_BFu15ll_D");
    static STRUCT_IF_C BFu31i_BFu15ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu15ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_D");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_D");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_D");
    check_field_offset(lv, v3, 8, "BFu31i_BFu15ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_D, BFu31i_BFu15ll_D)
//============================================================================


struct  BFu31i_BFu15ll_F  {
  unsigned int v1:31;
  __tsu64 v2:15;
  float v3;
};
//SIG(1 BFu31i_BFu15ll_F) C1{ Fi:31 FL:15 Fi}



static void Test_BFu31i_BFu15ll_F()
{
  {
    init_simple_test("BFu31i_BFu15ll_F");
    static STRUCT_IF_C BFu31i_BFu15ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu15ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_F");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_F");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_F");
    check_field_offset(lv, v3, 8, "BFu31i_BFu15ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_F, BFu31i_BFu15ll_F)
//============================================================================


struct  BFu31i_BFu15ll_I  {
  unsigned int v1:31;
  __tsu64 v2:15;
  int v3;
};
//SIG(1 BFu31i_BFu15ll_I) C1{ Fi:31 FL:15 Fi}



static void Test_BFu31i_BFu15ll_I()
{
  {
    init_simple_test("BFu31i_BFu15ll_I");
    static STRUCT_IF_C BFu31i_BFu15ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu15ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_I");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_I");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_I");
    check_field_offset(lv, v3, 8, "BFu31i_BFu15ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_I, BFu31i_BFu15ll_I)
//============================================================================


struct  BFu31i_BFu15ll_Ip  {
  unsigned int v1:31;
  __tsu64 v2:15;
  int *v3;
};
//SIG(1 BFu31i_BFu15ll_Ip) C1{ Fi:31 FL:15 Fp}



static void Test_BFu31i_BFu15ll_Ip()
{
  {
    init_simple_test("BFu31i_BFu15ll_Ip");
    static STRUCT_IF_C BFu31i_BFu15ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu15ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_Ip");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_Ip");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_Ip");
    check_field_offset(lv, v3, 8, "BFu31i_BFu15ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_Ip, BFu31i_BFu15ll_Ip)
//============================================================================


struct  BFu31i_BFu15ll_L  {
  unsigned int v1:31;
  __tsu64 v2:15;
  __tsi64 v3;
};
//SIG(1 BFu31i_BFu15ll_L) C1{ Fi:31 FL:15 FL}



static void Test_BFu31i_BFu15ll_L()
{
  {
    init_simple_test("BFu31i_BFu15ll_L");
    static STRUCT_IF_C BFu31i_BFu15ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu15ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_L");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_L");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_L");
    check_field_offset(lv, v3, 8, "BFu31i_BFu15ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_L, BFu31i_BFu15ll_L)
//============================================================================


struct  BFu31i_BFu15ll_S  {
  unsigned int v1:31;
  __tsu64 v2:15;
  short v3;
};
//SIG(1 BFu31i_BFu15ll_S) C1{ Fi:31 FL:15 Fs}



static void Test_BFu31i_BFu15ll_S()
{
  {
    init_simple_test("BFu31i_BFu15ll_S");
    static STRUCT_IF_C BFu31i_BFu15ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_S");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_S");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_S");
    check_field_offset(lv, v3, 6, "BFu31i_BFu15ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_S, BFu31i_BFu15ll_S)
//============================================================================


struct  BFu31i_BFu15ll_Uc  {
  unsigned int v1:31;
  __tsu64 v2:15;
  unsigned char v3;
};
//SIG(1 BFu31i_BFu15ll_Uc) C1{ Fi:31 FL:15 Fc}



static void Test_BFu31i_BFu15ll_Uc()
{
  {
    init_simple_test("BFu31i_BFu15ll_Uc");
    static STRUCT_IF_C BFu31i_BFu15ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_Uc");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_Uc");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_Uc");
    check_field_offset(lv, v3, 6, "BFu31i_BFu15ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_Uc, BFu31i_BFu15ll_Uc)
//============================================================================


struct  BFu31i_BFu15ll_Ui  {
  unsigned int v1:31;
  __tsu64 v2:15;
  unsigned int v3;
};
//SIG(1 BFu31i_BFu15ll_Ui) C1{ Fi:31 FL:15 Fi}



static void Test_BFu31i_BFu15ll_Ui()
{
  {
    init_simple_test("BFu31i_BFu15ll_Ui");
    static STRUCT_IF_C BFu31i_BFu15ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu15ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_Ui");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_Ui");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_Ui");
    check_field_offset(lv, v3, 8, "BFu31i_BFu15ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_Ui, BFu31i_BFu15ll_Ui)
//============================================================================


struct  BFu31i_BFu15ll_Ul  {
  unsigned int v1:31;
  __tsu64 v2:15;
  __tsu64 v3;
};
//SIG(1 BFu31i_BFu15ll_Ul) C1{ Fi:31 FL:15 FL}



static void Test_BFu31i_BFu15ll_Ul()
{
  {
    init_simple_test("BFu31i_BFu15ll_Ul");
    static STRUCT_IF_C BFu31i_BFu15ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu15ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_Ul");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_Ul");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_Ul");
    check_field_offset(lv, v3, 8, "BFu31i_BFu15ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_Ul, BFu31i_BFu15ll_Ul)
//============================================================================


struct  BFu31i_BFu15ll_Us  {
  unsigned int v1:31;
  __tsu64 v2:15;
  unsigned short v3;
};
//SIG(1 BFu31i_BFu15ll_Us) C1{ Fi:31 FL:15 Fs}



static void Test_BFu31i_BFu15ll_Us()
{
  {
    init_simple_test("BFu31i_BFu15ll_Us");
    static STRUCT_IF_C BFu31i_BFu15ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_Us");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_Us");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_Us");
    check_field_offset(lv, v3, 6, "BFu31i_BFu15ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_Us, BFu31i_BFu15ll_Us)
//============================================================================


struct  BFu31i_BFu15ll_Vp  {
  unsigned int v1:31;
  __tsu64 v2:15;
  void *v3;
};
//SIG(1 BFu31i_BFu15ll_Vp) C1{ Fi:31 FL:15 Fp}



static void Test_BFu31i_BFu15ll_Vp()
{
  {
    init_simple_test("BFu31i_BFu15ll_Vp");
    static STRUCT_IF_C BFu31i_BFu15ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu15ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_Vp");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_Vp");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_Vp");
    check_field_offset(lv, v3, 8, "BFu31i_BFu15ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15ll_Vp, BFu31i_BFu15ll_Vp)
//============================================================================


struct  BFu31i_BFu15s  {
  unsigned int v1:31;
  unsigned short v2:15;
};
//SIG(1 BFu31i_BFu15s) C1{ Fi:31 Fs:15}



static void Test_BFu31i_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu15s");
    static STRUCT_IF_C BFu31i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s, BFu31i_BFu15s)
//============================================================================


struct  BFu31i_BFu15s_BFu15i  {
  unsigned int v1:31;
  unsigned short v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu31i_BFu15s_BFu15i) C1{ Fi:31 Fs:15 Fi:15}



static void Test_BFu31i_BFu15s_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu15s_BFu15i");
    static STRUCT_IF_C BFu31i_BFu15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 5, 7, 15, 1, "BFu31i_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 5, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_BFu15i, BFu31i_BFu15s_BFu15i)
//============================================================================


struct  BFu31i_BFu15s_BFu15ll  {
  unsigned int v1:31;
  unsigned short v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_BFu15s_BFu15ll) C1{ Fi:31 Fs:15 FL:15}



static void Test_BFu31i_BFu15s_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu15s_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 5, 7, 15, 1, "BFu31i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 5, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_BFu15ll, BFu31i_BFu15s_BFu15ll)
//============================================================================


struct  BFu31i_BFu15s_BFu15s  {
  unsigned int v1:31;
  unsigned short v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu31i_BFu15s_BFu15s) C1{ Fi:31 Fs:15 Fs:15}



static void Test_BFu31i_BFu15s_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu15s_BFu15s");
    static STRUCT_IF_C BFu31i_BFu15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_BFu15s, BFu31i_BFu15s_BFu15s)
//============================================================================


struct  BFu31i_BFu15s_BFu16i  {
  unsigned int v1:31;
  unsigned short v2:15;
  unsigned int v3:16;
};
//SIG(1 BFu31i_BFu15s_BFu16i) C1{ Fi:31 Fs:15 Fi:16}



static void Test_BFu31i_BFu15s_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu15s_BFu16i");
    static STRUCT_IF_C BFu31i_BFu15s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu16i");
    set_bf_and_test(lv, v3, 5, 7, 16, 1, "BFu31i_BFu15s_BFu16i");
    set_bf_and_test(lv, v3, 5, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu15s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_BFu16i, BFu31i_BFu15s_BFu16i)
//============================================================================


struct  BFu31i_BFu15s_BFu16ll  {
  unsigned int v1:31;
  unsigned short v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_BFu15s_BFu16ll) C1{ Fi:31 Fs:15 FL:16}



static void Test_BFu31i_BFu15s_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu15s_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu15s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu16ll");
    set_bf_and_test(lv, v3, 5, 7, 16, 1, "BFu31i_BFu15s_BFu16ll");
    set_bf_and_test(lv, v3, 5, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu15s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_BFu16ll, BFu31i_BFu15s_BFu16ll)
//============================================================================


struct  BFu31i_BFu15s_BFu16s  {
  unsigned int v1:31;
  unsigned short v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu31i_BFu15s_BFu16s) C1{ Fi:31 Fs:15 Fs:16}



static void Test_BFu31i_BFu15s_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu15s_BFu16s");
    static STRUCT_IF_C BFu31i_BFu15s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_BFu15s_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu15s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_BFu16s, BFu31i_BFu15s_BFu16s)
//============================================================================


struct  BFu31i_BFu15s_BFu17i  {
  unsigned int v1:31;
  unsigned short v2:15;
  unsigned int v3:17;
};
//SIG(1 BFu31i_BFu15s_BFu17i) C1{ Fi:31 Fs:15 Fi:17}



static void Test_BFu31i_BFu15s_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu15s_BFu17i");
    static STRUCT_IF_C BFu31i_BFu15s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu17i");
    set_bf_and_test(lv, v3, 5, 7, 17, 1, "BFu31i_BFu15s_BFu17i");
    set_bf_and_test(lv, v3, 5, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu15s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_BFu17i, BFu31i_BFu15s_BFu17i)
//============================================================================


struct  BFu31i_BFu15s_BFu17ll  {
  unsigned int v1:31;
  unsigned short v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_BFu15s_BFu17ll) C1{ Fi:31 Fs:15 FL:17}



static void Test_BFu31i_BFu15s_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu15s_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu15s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu17ll");
    set_bf_and_test(lv, v3, 5, 7, 17, 1, "BFu31i_BFu15s_BFu17ll");
    set_bf_and_test(lv, v3, 5, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu15s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_BFu17ll, BFu31i_BFu15s_BFu17ll)
//============================================================================


struct  BFu31i_BFu15s_BFu1c  {
  unsigned int v1:31;
  unsigned short v2:15;
  unsigned char v3:1;
};
//SIG(1 BFu31i_BFu15s_BFu1c) C1{ Fi:31 Fs:15 Fc:1}



static void Test_BFu31i_BFu15s_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu15s_BFu1c");
    static STRUCT_IF_C BFu31i_BFu15s_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu1c");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu31i_BFu15s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_BFu1c, BFu31i_BFu15s_BFu1c)
//============================================================================


struct  BFu31i_BFu15s_BFu1i  {
  unsigned int v1:31;
  unsigned short v2:15;
  unsigned int v3:1;
};
//SIG(1 BFu31i_BFu15s_BFu1i) C1{ Fi:31 Fs:15 Fi:1}



static void Test_BFu31i_BFu15s_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu15s_BFu1i");
    static STRUCT_IF_C BFu31i_BFu15s_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu1i");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu31i_BFu15s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_BFu1i, BFu31i_BFu15s_BFu1i)
//============================================================================


struct  BFu31i_BFu15s_BFu1ll  {
  unsigned int v1:31;
  unsigned short v2:15;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_BFu15s_BFu1ll) C1{ Fi:31 Fs:15 FL:1}



static void Test_BFu31i_BFu15s_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu15s_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu15s_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu1ll");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu31i_BFu15s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_BFu1ll, BFu31i_BFu15s_BFu1ll)
//============================================================================


struct  BFu31i_BFu15s_BFu1s  {
  unsigned int v1:31;
  unsigned short v2:15;
  unsigned short v3:1;
};
//SIG(1 BFu31i_BFu15s_BFu1s) C1{ Fi:31 Fs:15 Fs:1}



static void Test_BFu31i_BFu15s_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu15s_BFu1s");
    static STRUCT_IF_C BFu31i_BFu15s_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu1s");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu31i_BFu15s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_BFu1s, BFu31i_BFu15s_BFu1s)
//============================================================================


struct  BFu31i_BFu15s_BFu31i  {
  unsigned int v1:31;
  unsigned short v2:15;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFu15s_BFu31i) C1{ Fi:31 Fs:15 Fi:31}



static void Test_BFu31i_BFu15s_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu15s_BFu31i");
    static STRUCT_IF_C BFu31i_BFu15s_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu15s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu15s_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_BFu31i, BFu31i_BFu15s_BFu31i)
//============================================================================


struct  BFu31i_BFu15s_BFu31ll  {
  unsigned int v1:31;
  unsigned short v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFu15s_BFu31ll) C1{ Fi:31 Fs:15 FL:31}



static void Test_BFu31i_BFu15s_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu15s_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu15s_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu15s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 31, 1, "BFu31i_BFu15s_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_BFu31ll, BFu31i_BFu15s_BFu31ll)
//============================================================================


struct  BFu31i_BFu15s_BFu32i  {
  unsigned int v1:31;
  unsigned short v2:15;
  unsigned int v3:32;
};
//SIG(1 BFu31i_BFu15s_BFu32i) C1{ Fi:31 Fs:15 Fi:32}



static void Test_BFu31i_BFu15s_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu15s_BFu32i");
    static STRUCT_IF_C BFu31i_BFu15s_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu15s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_BFu15s_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu15s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_BFu32i, BFu31i_BFu15s_BFu32i)
//============================================================================


struct  BFu31i_BFu15s_BFu32ll  {
  unsigned int v1:31;
  unsigned short v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_BFu15s_BFu32ll) C1{ Fi:31 Fs:15 FL:32}



static void Test_BFu31i_BFu15s_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu15s_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu15s_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu15s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 32, 1, "BFu31i_BFu15s_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu31i_BFu15s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_BFu32ll, BFu31i_BFu15s_BFu32ll)
//============================================================================


struct  BFu31i_BFu15s_BFu33  {
  unsigned int v1:31;
  unsigned short v2:15;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_BFu15s_BFu33) C1{ Fi:31 Fs:15 FL:33}



static void Test_BFu31i_BFu15s_BFu33()
{
  {
    init_simple_test("BFu31i_BFu15s_BFu33");
    static STRUCT_IF_C BFu31i_BFu15s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu15s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 33, 1, "BFu31i_BFu15s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu31i_BFu15s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_BFu33, BFu31i_BFu15s_BFu33)
//============================================================================


struct  BFu31i_BFu15s_BFu7c  {
  unsigned int v1:31;
  unsigned short v2:15;
  unsigned char v3:7;
};
//SIG(1 BFu31i_BFu15s_BFu7c) C1{ Fi:31 Fs:15 Fc:7}



static void Test_BFu31i_BFu15s_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu15s_BFu7c");
    static STRUCT_IF_C BFu31i_BFu15s_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31i_BFu15s_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu15s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_BFu7c, BFu31i_BFu15s_BFu7c)
//============================================================================


struct  BFu31i_BFu15s_BFu7i  {
  unsigned int v1:31;
  unsigned short v2:15;
  unsigned int v3:7;
};
//SIG(1 BFu31i_BFu15s_BFu7i) C1{ Fi:31 Fs:15 Fi:7}



static void Test_BFu31i_BFu15s_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu15s_BFu7i");
    static STRUCT_IF_C BFu31i_BFu15s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu7i");
    set_bf_and_test(lv, v3, 5, 7, 7, 1, "BFu31i_BFu15s_BFu7i");
    set_bf_and_test(lv, v3, 5, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu15s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_BFu7i, BFu31i_BFu15s_BFu7i)
//============================================================================


struct  BFu31i_BFu15s_BFu7ll  {
  unsigned int v1:31;
  unsigned short v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_BFu15s_BFu7ll) C1{ Fi:31 Fs:15 FL:7}



static void Test_BFu31i_BFu15s_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu15s_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu15s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu7ll");
    set_bf_and_test(lv, v3, 5, 7, 7, 1, "BFu31i_BFu15s_BFu7ll");
    set_bf_and_test(lv, v3, 5, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu15s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_BFu7ll, BFu31i_BFu15s_BFu7ll)
//============================================================================


struct  BFu31i_BFu15s_BFu7s  {
  unsigned int v1:31;
  unsigned short v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu31i_BFu15s_BFu7s) C1{ Fi:31 Fs:15 Fs:7}



static void Test_BFu31i_BFu15s_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu15s_BFu7s");
    static STRUCT_IF_C BFu31i_BFu15s_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31i_BFu15s_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu15s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_BFu7s, BFu31i_BFu15s_BFu7s)
//============================================================================


struct  BFu31i_BFu15s_BFu8c  {
  unsigned int v1:31;
  unsigned short v2:15;
  unsigned char v3:8;
};
//SIG(1 BFu31i_BFu15s_BFu8c) C1{ Fi:31 Fs:15 Fc:8}



static void Test_BFu31i_BFu15s_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu15s_BFu8c");
    static STRUCT_IF_C BFu31i_BFu15s_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_BFu15s_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu15s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_BFu8c, BFu31i_BFu15s_BFu8c)
//============================================================================


struct  BFu31i_BFu15s_BFu8i  {
  unsigned int v1:31;
  unsigned short v2:15;
  unsigned int v3:8;
};
//SIG(1 BFu31i_BFu15s_BFu8i) C1{ Fi:31 Fs:15 Fi:8}



static void Test_BFu31i_BFu15s_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu15s_BFu8i");
    static STRUCT_IF_C BFu31i_BFu15s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu8i");
    set_bf_and_test(lv, v3, 5, 7, 8, 1, "BFu31i_BFu15s_BFu8i");
    set_bf_and_test(lv, v3, 5, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu15s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_BFu8i, BFu31i_BFu15s_BFu8i)
//============================================================================


struct  BFu31i_BFu15s_BFu8ll  {
  unsigned int v1:31;
  unsigned short v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_BFu15s_BFu8ll) C1{ Fi:31 Fs:15 FL:8}



static void Test_BFu31i_BFu15s_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu15s_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu15s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu8ll");
    set_bf_and_test(lv, v3, 5, 7, 8, 1, "BFu31i_BFu15s_BFu8ll");
    set_bf_and_test(lv, v3, 5, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu15s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_BFu8ll, BFu31i_BFu15s_BFu8ll)
//============================================================================


struct  BFu31i_BFu15s_BFu8s  {
  unsigned int v1:31;
  unsigned short v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu31i_BFu15s_BFu8s) C1{ Fi:31 Fs:15 Fs:8}



static void Test_BFu31i_BFu15s_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu15s_BFu8s");
    static STRUCT_IF_C BFu31i_BFu15s_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_BFu15s_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu15s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_BFu8s, BFu31i_BFu15s_BFu8s)
//============================================================================


struct  BFu31i_BFu15s_BFu9i  {
  unsigned int v1:31;
  unsigned short v2:15;
  unsigned int v3:9;
};
//SIG(1 BFu31i_BFu15s_BFu9i) C1{ Fi:31 Fs:15 Fi:9}



static void Test_BFu31i_BFu15s_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu15s_BFu9i");
    static STRUCT_IF_C BFu31i_BFu15s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu9i");
    set_bf_and_test(lv, v3, 5, 7, 9, 1, "BFu31i_BFu15s_BFu9i");
    set_bf_and_test(lv, v3, 5, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu15s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_BFu9i, BFu31i_BFu15s_BFu9i)
//============================================================================


struct  BFu31i_BFu15s_BFu9ll  {
  unsigned int v1:31;
  unsigned short v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_BFu15s_BFu9ll) C1{ Fi:31 Fs:15 FL:9}



static void Test_BFu31i_BFu15s_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu15s_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu15s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu9ll");
    set_bf_and_test(lv, v3, 5, 7, 9, 1, "BFu31i_BFu15s_BFu9ll");
    set_bf_and_test(lv, v3, 5, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu15s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_BFu9ll, BFu31i_BFu15s_BFu9ll)
//============================================================================


struct  BFu31i_BFu15s_BFu9s  {
  unsigned int v1:31;
  unsigned short v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu31i_BFu15s_BFu9s) C1{ Fi:31 Fs:15 Fs:9}



static void Test_BFu31i_BFu15s_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu15s_BFu9s");
    static STRUCT_IF_C BFu31i_BFu15s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31i_BFu15s_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu15s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_BFu9s, BFu31i_BFu15s_BFu9s)
//============================================================================


struct  BFu31i_BFu15s_C  {
  unsigned int v1:31;
  unsigned short v2:15;
  char v3;
};
//SIG(1 BFu31i_BFu15s_C) C1{ Fi:31 Fs:15 Fc}



static void Test_BFu31i_BFu15s_C()
{
  {
    init_simple_test("BFu31i_BFu15s_C");
    static STRUCT_IF_C BFu31i_BFu15s_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15s_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_C");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_C");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_C");
    check_field_offset(lv, v3, 6, "BFu31i_BFu15s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_C, BFu31i_BFu15s_C)
//============================================================================


struct  BFu31i_BFu15s_D  {
  unsigned int v1:31;
  unsigned short v2:15;
  double v3;
};
//SIG(1 BFu31i_BFu15s_D) C1{ Fi:31 Fs:15 FL}



static void Test_BFu31i_BFu15s_D()
{
  {
    init_simple_test("BFu31i_BFu15s_D");
    static STRUCT_IF_C BFu31i_BFu15s_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu15s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15s_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_D");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_D");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_D");
    check_field_offset(lv, v3, 8, "BFu31i_BFu15s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_D, BFu31i_BFu15s_D)
//============================================================================


struct  BFu31i_BFu15s_F  {
  unsigned int v1:31;
  unsigned short v2:15;
  float v3;
};
//SIG(1 BFu31i_BFu15s_F) C1{ Fi:31 Fs:15 Fi}



static void Test_BFu31i_BFu15s_F()
{
  {
    init_simple_test("BFu31i_BFu15s_F");
    static STRUCT_IF_C BFu31i_BFu15s_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu15s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15s_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_F");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_F");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_F");
    check_field_offset(lv, v3, 8, "BFu31i_BFu15s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_F, BFu31i_BFu15s_F)
//============================================================================


struct  BFu31i_BFu15s_I  {
  unsigned int v1:31;
  unsigned short v2:15;
  int v3;
};
//SIG(1 BFu31i_BFu15s_I) C1{ Fi:31 Fs:15 Fi}



static void Test_BFu31i_BFu15s_I()
{
  {
    init_simple_test("BFu31i_BFu15s_I");
    static STRUCT_IF_C BFu31i_BFu15s_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu15s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15s_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_I");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_I");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_I");
    check_field_offset(lv, v3, 8, "BFu31i_BFu15s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_I, BFu31i_BFu15s_I)
//============================================================================


struct  BFu31i_BFu15s_Ip  {
  unsigned int v1:31;
  unsigned short v2:15;
  int *v3;
};
//SIG(1 BFu31i_BFu15s_Ip) C1{ Fi:31 Fs:15 Fp}



static void Test_BFu31i_BFu15s_Ip()
{
  {
    init_simple_test("BFu31i_BFu15s_Ip");
    static STRUCT_IF_C BFu31i_BFu15s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu15s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_Ip");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_Ip");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_Ip");
    check_field_offset(lv, v3, 8, "BFu31i_BFu15s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_Ip, BFu31i_BFu15s_Ip)
//============================================================================


struct  BFu31i_BFu15s_L  {
  unsigned int v1:31;
  unsigned short v2:15;
  __tsi64 v3;
};
//SIG(1 BFu31i_BFu15s_L) C1{ Fi:31 Fs:15 FL}



static void Test_BFu31i_BFu15s_L()
{
  {
    init_simple_test("BFu31i_BFu15s_L");
    static STRUCT_IF_C BFu31i_BFu15s_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu15s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15s_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_L");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_L");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_L");
    check_field_offset(lv, v3, 8, "BFu31i_BFu15s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_L, BFu31i_BFu15s_L)
//============================================================================


struct  BFu31i_BFu15s_S  {
  unsigned int v1:31;
  unsigned short v2:15;
  short v3;
};
//SIG(1 BFu31i_BFu15s_S) C1{ Fi:31 Fs:15 Fs}



static void Test_BFu31i_BFu15s_S()
{
  {
    init_simple_test("BFu31i_BFu15s_S");
    static STRUCT_IF_C BFu31i_BFu15s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15s_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_S");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_S");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_S");
    check_field_offset(lv, v3, 6, "BFu31i_BFu15s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_S, BFu31i_BFu15s_S)
//============================================================================


struct  BFu31i_BFu15s_Uc  {
  unsigned int v1:31;
  unsigned short v2:15;
  unsigned char v3;
};
//SIG(1 BFu31i_BFu15s_Uc) C1{ Fi:31 Fs:15 Fc}



static void Test_BFu31i_BFu15s_Uc()
{
  {
    init_simple_test("BFu31i_BFu15s_Uc");
    static STRUCT_IF_C BFu31i_BFu15s_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_Uc");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_Uc");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_Uc");
    check_field_offset(lv, v3, 6, "BFu31i_BFu15s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_Uc, BFu31i_BFu15s_Uc)
//============================================================================


struct  BFu31i_BFu15s_Ui  {
  unsigned int v1:31;
  unsigned short v2:15;
  unsigned int v3;
};
//SIG(1 BFu31i_BFu15s_Ui) C1{ Fi:31 Fs:15 Fi}



static void Test_BFu31i_BFu15s_Ui()
{
  {
    init_simple_test("BFu31i_BFu15s_Ui");
    static STRUCT_IF_C BFu31i_BFu15s_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu15s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_Ui");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_Ui");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_Ui");
    check_field_offset(lv, v3, 8, "BFu31i_BFu15s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_Ui, BFu31i_BFu15s_Ui)
//============================================================================


struct  BFu31i_BFu15s_Ul  {
  unsigned int v1:31;
  unsigned short v2:15;
  __tsu64 v3;
};
//SIG(1 BFu31i_BFu15s_Ul) C1{ Fi:31 Fs:15 FL}



static void Test_BFu31i_BFu15s_Ul()
{
  {
    init_simple_test("BFu31i_BFu15s_Ul");
    static STRUCT_IF_C BFu31i_BFu15s_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu15s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_Ul");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_Ul");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_Ul");
    check_field_offset(lv, v3, 8, "BFu31i_BFu15s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_Ul, BFu31i_BFu15s_Ul)
//============================================================================


struct  BFu31i_BFu15s_Us  {
  unsigned int v1:31;
  unsigned short v2:15;
  unsigned short v3;
};
//SIG(1 BFu31i_BFu15s_Us) C1{ Fi:31 Fs:15 Fs}



static void Test_BFu31i_BFu15s_Us()
{
  {
    init_simple_test("BFu31i_BFu15s_Us");
    static STRUCT_IF_C BFu31i_BFu15s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_Us");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_Us");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_Us");
    check_field_offset(lv, v3, 6, "BFu31i_BFu15s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_Us, BFu31i_BFu15s_Us)
//============================================================================


struct  BFu31i_BFu15s_Vp  {
  unsigned int v1:31;
  unsigned short v2:15;
  void *v3;
};
//SIG(1 BFu31i_BFu15s_Vp) C1{ Fi:31 Fs:15 Fp}



static void Test_BFu31i_BFu15s_Vp()
{
  {
    init_simple_test("BFu31i_BFu15s_Vp");
    static STRUCT_IF_C BFu31i_BFu15s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu15s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_Vp");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_Vp");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_Vp");
    check_field_offset(lv, v3, 8, "BFu31i_BFu15s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu15s_Vp, BFu31i_BFu15s_Vp)
//============================================================================


struct  BFu31i_BFu16i  {
  unsigned int v1:31;
  unsigned int v2:16;
};
//SIG(1 BFu31i_BFu16i) C1{ Fi:31 Fi:16}



static void Test_BFu31i_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu16i");
    static STRUCT_IF_C BFu31i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i, BFu31i_BFu16i)
//============================================================================


struct  BFu31i_BFu16i_BFu15i  {
  unsigned int v1:31;
  unsigned int v2:16;
  unsigned int v3:15;
};
//SIG(1 BFu31i_BFu16i_BFu15i) C1{ Fi:31 Fi:16 Fi:15}



static void Test_BFu31i_BFu16i_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu16i_BFu15i");
    static STRUCT_IF_C BFu31i_BFu16i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_BFu16i_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu16i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_BFu15i, BFu31i_BFu16i_BFu15i)
//============================================================================


struct  BFu31i_BFu16i_BFu15ll  {
  unsigned int v1:31;
  unsigned int v2:16;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_BFu16i_BFu15ll) C1{ Fi:31 Fi:16 FL:15}



static void Test_BFu31i_BFu16i_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu16i_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu16i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_BFu16i_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu16i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_BFu15ll, BFu31i_BFu16i_BFu15ll)
//============================================================================


struct  BFu31i_BFu16i_BFu15s  {
  unsigned int v1:31;
  unsigned int v2:16;
  unsigned short v3:15;
};
//SIG(1 BFu31i_BFu16i_BFu15s) C1{ Fi:31 Fi:16 Fs:15}



static void Test_BFu31i_BFu16i_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu16i_BFu15s");
    static STRUCT_IF_C BFu31i_BFu16i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu16i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_BFu15s, BFu31i_BFu16i_BFu15s)
//============================================================================


struct  BFu31i_BFu16i_BFu16i  {
  unsigned int v1:31;
  unsigned int v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu31i_BFu16i_BFu16i) C1{ Fi:31 Fi:16 Fi:16}



static void Test_BFu31i_BFu16i_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu16i_BFu16i");
    static STRUCT_IF_C BFu31i_BFu16i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_BFu16i, BFu31i_BFu16i_BFu16i)
//============================================================================


struct  BFu31i_BFu16i_BFu16ll  {
  unsigned int v1:31;
  unsigned int v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_BFu16i_BFu16ll) C1{ Fi:31 Fi:16 FL:16}



static void Test_BFu31i_BFu16i_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu16i_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu16i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_BFu16ll, BFu31i_BFu16i_BFu16ll)
//============================================================================


struct  BFu31i_BFu16i_BFu16s  {
  unsigned int v1:31;
  unsigned int v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu31i_BFu16i_BFu16s) C1{ Fi:31 Fi:16 Fs:16}



static void Test_BFu31i_BFu16i_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu16i_BFu16s");
    static STRUCT_IF_C BFu31i_BFu16i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_BFu16s, BFu31i_BFu16i_BFu16s)
//============================================================================


struct  BFu31i_BFu16i_BFu17i  {
  unsigned int v1:31;
  unsigned int v2:16;
  unsigned int v3:17;
};
//SIG(1 BFu31i_BFu16i_BFu17i) C1{ Fi:31 Fi:16 Fi:17}



static void Test_BFu31i_BFu16i_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu16i_BFu17i");
    static STRUCT_IF_C BFu31i_BFu16i_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu16i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31i_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu16i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_BFu17i, BFu31i_BFu16i_BFu17i)
//============================================================================


struct  BFu31i_BFu16i_BFu17ll  {
  unsigned int v1:31;
  unsigned int v2:16;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_BFu16i_BFu17ll) C1{ Fi:31 Fi:16 FL:17}



static void Test_BFu31i_BFu16i_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu16i_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu16i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu16i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, 1, "BFu31i_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, hide_ull(1LL<<16), "BFu31i_BFu16i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_BFu17ll, BFu31i_BFu16i_BFu17ll)
//============================================================================


struct  BFu31i_BFu16i_BFu1c  {
  unsigned int v1:31;
  unsigned int v2:16;
  unsigned char v3:1;
};
//SIG(1 BFu31i_BFu16i_BFu1c) C1{ Fi:31 Fi:16 Fc:1}



static void Test_BFu31i_BFu16i_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu16i_BFu1c");
    static STRUCT_IF_C BFu31i_BFu16i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu1c");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31i_BFu16i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_BFu1c, BFu31i_BFu16i_BFu1c)
//============================================================================


struct  BFu31i_BFu16i_BFu1i  {
  unsigned int v1:31;
  unsigned int v2:16;
  unsigned int v3:1;
};
//SIG(1 BFu31i_BFu16i_BFu1i) C1{ Fi:31 Fi:16 Fi:1}



static void Test_BFu31i_BFu16i_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu16i_BFu1i");
    static STRUCT_IF_C BFu31i_BFu16i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu1i");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31i_BFu16i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_BFu1i, BFu31i_BFu16i_BFu1i)
//============================================================================


struct  BFu31i_BFu16i_BFu1ll  {
  unsigned int v1:31;
  unsigned int v2:16;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_BFu16i_BFu1ll) C1{ Fi:31 Fi:16 FL:1}



static void Test_BFu31i_BFu16i_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu16i_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu16i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu1ll");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31i_BFu16i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_BFu1ll, BFu31i_BFu16i_BFu1ll)
//============================================================================


struct  BFu31i_BFu16i_BFu1s  {
  unsigned int v1:31;
  unsigned int v2:16;
  unsigned short v3:1;
};
//SIG(1 BFu31i_BFu16i_BFu1s) C1{ Fi:31 Fi:16 Fs:1}



static void Test_BFu31i_BFu16i_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu16i_BFu1s");
    static STRUCT_IF_C BFu31i_BFu16i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu1s");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31i_BFu16i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_BFu1s, BFu31i_BFu16i_BFu1s)
//============================================================================


struct  BFu31i_BFu16i_BFu31i  {
  unsigned int v1:31;
  unsigned int v2:16;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFu16i_BFu31i) C1{ Fi:31 Fi:16 Fi:31}



static void Test_BFu31i_BFu16i_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu16i_BFu31i");
    static STRUCT_IF_C BFu31i_BFu16i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu16i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_BFu31i, BFu31i_BFu16i_BFu31i)
//============================================================================


struct  BFu31i_BFu16i_BFu31ll  {
  unsigned int v1:31;
  unsigned int v2:16;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFu16i_BFu31ll) C1{ Fi:31 Fi:16 FL:31}



static void Test_BFu31i_BFu16i_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu16i_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu16i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu16i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, 1, "BFu31i_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_BFu31ll, BFu31i_BFu16i_BFu31ll)
//============================================================================


struct  BFu31i_BFu16i_BFu32i  {
  unsigned int v1:31;
  unsigned int v2:16;
  unsigned int v3:32;
};
//SIG(1 BFu31i_BFu16i_BFu32i) C1{ Fi:31 Fi:16 Fi:32}



static void Test_BFu31i_BFu16i_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu16i_BFu32i");
    static STRUCT_IF_C BFu31i_BFu16i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu16i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu16i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_BFu32i, BFu31i_BFu16i_BFu32i)
//============================================================================


struct  BFu31i_BFu16i_BFu32ll  {
  unsigned int v1:31;
  unsigned int v2:16;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_BFu16i_BFu32ll) C1{ Fi:31 Fi:16 FL:32}



static void Test_BFu31i_BFu16i_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu16i_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu16i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu16i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, 1, "BFu31i_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, hide_ull(1LL<<31), "BFu31i_BFu16i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_BFu32ll, BFu31i_BFu16i_BFu32ll)
//============================================================================


struct  BFu31i_BFu16i_BFu33  {
  unsigned int v1:31;
  unsigned int v2:16;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_BFu16i_BFu33) C1{ Fi:31 Fi:16 FL:33}



static void Test_BFu31i_BFu16i_BFu33()
{
  {
    init_simple_test("BFu31i_BFu16i_BFu33");
    static STRUCT_IF_C BFu31i_BFu16i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu16i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, 1, "BFu31i_BFu16i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, hide_ull(1LL<<32), "BFu31i_BFu16i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_BFu33, BFu31i_BFu16i_BFu33)
//============================================================================


struct  BFu31i_BFu16i_BFu7c  {
  unsigned int v1:31;
  unsigned int v2:16;
  unsigned char v3:7;
};
//SIG(1 BFu31i_BFu16i_BFu7c) C1{ Fi:31 Fi:16 Fc:7}



static void Test_BFu31i_BFu16i_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu16i_BFu7c");
    static STRUCT_IF_C BFu31i_BFu16i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31i_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu16i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_BFu7c, BFu31i_BFu16i_BFu7c)
//============================================================================


struct  BFu31i_BFu16i_BFu7i  {
  unsigned int v1:31;
  unsigned int v2:16;
  unsigned int v3:7;
};
//SIG(1 BFu31i_BFu16i_BFu7i) C1{ Fi:31 Fi:16 Fi:7}



static void Test_BFu31i_BFu16i_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu16i_BFu7i");
    static STRUCT_IF_C BFu31i_BFu16i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31i_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu16i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_BFu7i, BFu31i_BFu16i_BFu7i)
//============================================================================


struct  BFu31i_BFu16i_BFu7ll  {
  unsigned int v1:31;
  unsigned int v2:16;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_BFu16i_BFu7ll) C1{ Fi:31 Fi:16 FL:7}



static void Test_BFu31i_BFu16i_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu16i_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu16i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31i_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu16i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_BFu7ll, BFu31i_BFu16i_BFu7ll)
//============================================================================


struct  BFu31i_BFu16i_BFu7s  {
  unsigned int v1:31;
  unsigned int v2:16;
  unsigned short v3:7;
};
//SIG(1 BFu31i_BFu16i_BFu7s) C1{ Fi:31 Fi:16 Fs:7}



static void Test_BFu31i_BFu16i_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu16i_BFu7s");
    static STRUCT_IF_C BFu31i_BFu16i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31i_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu16i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_BFu7s, BFu31i_BFu16i_BFu7s)
//============================================================================


struct  BFu31i_BFu16i_BFu8c  {
  unsigned int v1:31;
  unsigned int v2:16;
  unsigned char v3:8;
};
//SIG(1 BFu31i_BFu16i_BFu8c) C1{ Fi:31 Fi:16 Fc:8}



static void Test_BFu31i_BFu16i_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu16i_BFu8c");
    static STRUCT_IF_C BFu31i_BFu16i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu16i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_BFu8c, BFu31i_BFu16i_BFu8c)
//============================================================================


struct  BFu31i_BFu16i_BFu8i  {
  unsigned int v1:31;
  unsigned int v2:16;
  unsigned int v3:8;
};
//SIG(1 BFu31i_BFu16i_BFu8i) C1{ Fi:31 Fi:16 Fi:8}



static void Test_BFu31i_BFu16i_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu16i_BFu8i");
    static STRUCT_IF_C BFu31i_BFu16i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu16i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_BFu8i, BFu31i_BFu16i_BFu8i)
//============================================================================


struct  BFu31i_BFu16i_BFu8ll  {
  unsigned int v1:31;
  unsigned int v2:16;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_BFu16i_BFu8ll) C1{ Fi:31 Fi:16 FL:8}



static void Test_BFu31i_BFu16i_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu16i_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu16i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu16i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_BFu8ll, BFu31i_BFu16i_BFu8ll)
//============================================================================


struct  BFu31i_BFu16i_BFu8s  {
  unsigned int v1:31;
  unsigned int v2:16;
  unsigned short v3:8;
};
//SIG(1 BFu31i_BFu16i_BFu8s) C1{ Fi:31 Fi:16 Fs:8}



static void Test_BFu31i_BFu16i_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu16i_BFu8s");
    static STRUCT_IF_C BFu31i_BFu16i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu16i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_BFu8s, BFu31i_BFu16i_BFu8s)
//============================================================================


struct  BFu31i_BFu16i_BFu9i  {
  unsigned int v1:31;
  unsigned int v2:16;
  unsigned int v3:9;
};
//SIG(1 BFu31i_BFu16i_BFu9i) C1{ Fi:31 Fi:16 Fi:9}



static void Test_BFu31i_BFu16i_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu16i_BFu9i");
    static STRUCT_IF_C BFu31i_BFu16i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31i_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu16i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_BFu9i, BFu31i_BFu16i_BFu9i)
//============================================================================


struct  BFu31i_BFu16i_BFu9ll  {
  unsigned int v1:31;
  unsigned int v2:16;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_BFu16i_BFu9ll) C1{ Fi:31 Fi:16 FL:9}



static void Test_BFu31i_BFu16i_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu16i_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu16i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31i_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu16i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_BFu9ll, BFu31i_BFu16i_BFu9ll)
//============================================================================


struct  BFu31i_BFu16i_BFu9s  {
  unsigned int v1:31;
  unsigned int v2:16;
  unsigned short v3:9;
};
//SIG(1 BFu31i_BFu16i_BFu9s) C1{ Fi:31 Fi:16 Fs:9}



static void Test_BFu31i_BFu16i_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu16i_BFu9s");
    static STRUCT_IF_C BFu31i_BFu16i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31i_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu16i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_BFu9s, BFu31i_BFu16i_BFu9s)
//============================================================================


struct  BFu31i_BFu16i_C  {
  unsigned int v1:31;
  unsigned int v2:16;
  char v3;
};
//SIG(1 BFu31i_BFu16i_C) C1{ Fi:31 Fi:16 Fc}



static void Test_BFu31i_BFu16i_C()
{
  {
    init_simple_test("BFu31i_BFu16i_C");
    static STRUCT_IF_C BFu31i_BFu16i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16i_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_C");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_C");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_C");
    check_field_offset(lv, v3, 6, "BFu31i_BFu16i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_C, BFu31i_BFu16i_C)
//============================================================================


struct  BFu31i_BFu16i_D  {
  unsigned int v1:31;
  unsigned int v2:16;
  double v3;
};
//SIG(1 BFu31i_BFu16i_D) C1{ Fi:31 Fi:16 FL}



static void Test_BFu31i_BFu16i_D()
{
  {
    init_simple_test("BFu31i_BFu16i_D");
    static STRUCT_IF_C BFu31i_BFu16i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu16i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16i_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_D");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_D");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_D");
    check_field_offset(lv, v3, 8, "BFu31i_BFu16i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_D, BFu31i_BFu16i_D)
//============================================================================


struct  BFu31i_BFu16i_F  {
  unsigned int v1:31;
  unsigned int v2:16;
  float v3;
};
//SIG(1 BFu31i_BFu16i_F) C1{ Fi:31 Fi:16 Fi}



static void Test_BFu31i_BFu16i_F()
{
  {
    init_simple_test("BFu31i_BFu16i_F");
    static STRUCT_IF_C BFu31i_BFu16i_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu16i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16i_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_F");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_F");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_F");
    check_field_offset(lv, v3, 8, "BFu31i_BFu16i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_F, BFu31i_BFu16i_F)
//============================================================================


struct  BFu31i_BFu16i_I  {
  unsigned int v1:31;
  unsigned int v2:16;
  int v3;
};
//SIG(1 BFu31i_BFu16i_I) C1{ Fi:31 Fi:16 Fi}



static void Test_BFu31i_BFu16i_I()
{
  {
    init_simple_test("BFu31i_BFu16i_I");
    static STRUCT_IF_C BFu31i_BFu16i_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu16i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16i_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_I");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_I");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_I");
    check_field_offset(lv, v3, 8, "BFu31i_BFu16i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_I, BFu31i_BFu16i_I)
//============================================================================


struct  BFu31i_BFu16i_Ip  {
  unsigned int v1:31;
  unsigned int v2:16;
  int *v3;
};
//SIG(1 BFu31i_BFu16i_Ip) C1{ Fi:31 Fi:16 Fp}



static void Test_BFu31i_BFu16i_Ip()
{
  {
    init_simple_test("BFu31i_BFu16i_Ip");
    static STRUCT_IF_C BFu31i_BFu16i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu16i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_Ip");
    check_field_offset(lv, v3, 8, "BFu31i_BFu16i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_Ip, BFu31i_BFu16i_Ip)
//============================================================================


struct  BFu31i_BFu16i_L  {
  unsigned int v1:31;
  unsigned int v2:16;
  __tsi64 v3;
};
//SIG(1 BFu31i_BFu16i_L) C1{ Fi:31 Fi:16 FL}



static void Test_BFu31i_BFu16i_L()
{
  {
    init_simple_test("BFu31i_BFu16i_L");
    static STRUCT_IF_C BFu31i_BFu16i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu16i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16i_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_L");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_L");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_L");
    check_field_offset(lv, v3, 8, "BFu31i_BFu16i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_L, BFu31i_BFu16i_L)
//============================================================================


struct  BFu31i_BFu16i_S  {
  unsigned int v1:31;
  unsigned int v2:16;
  short v3;
};
//SIG(1 BFu31i_BFu16i_S) C1{ Fi:31 Fi:16 Fs}



static void Test_BFu31i_BFu16i_S()
{
  {
    init_simple_test("BFu31i_BFu16i_S");
    static STRUCT_IF_C BFu31i_BFu16i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16i_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_S");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_S");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_S");
    check_field_offset(lv, v3, 6, "BFu31i_BFu16i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_S, BFu31i_BFu16i_S)
//============================================================================


struct  BFu31i_BFu16i_Uc  {
  unsigned int v1:31;
  unsigned int v2:16;
  unsigned char v3;
};
//SIG(1 BFu31i_BFu16i_Uc) C1{ Fi:31 Fi:16 Fc}



static void Test_BFu31i_BFu16i_Uc()
{
  {
    init_simple_test("BFu31i_BFu16i_Uc");
    static STRUCT_IF_C BFu31i_BFu16i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_Uc");
    check_field_offset(lv, v3, 6, "BFu31i_BFu16i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_Uc, BFu31i_BFu16i_Uc)
//============================================================================


struct  BFu31i_BFu16i_Ui  {
  unsigned int v1:31;
  unsigned int v2:16;
  unsigned int v3;
};
//SIG(1 BFu31i_BFu16i_Ui) C1{ Fi:31 Fi:16 Fi}



static void Test_BFu31i_BFu16i_Ui()
{
  {
    init_simple_test("BFu31i_BFu16i_Ui");
    static STRUCT_IF_C BFu31i_BFu16i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu16i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_Ui");
    check_field_offset(lv, v3, 8, "BFu31i_BFu16i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_Ui, BFu31i_BFu16i_Ui)
//============================================================================


struct  BFu31i_BFu16i_Ul  {
  unsigned int v1:31;
  unsigned int v2:16;
  __tsu64 v3;
};
//SIG(1 BFu31i_BFu16i_Ul) C1{ Fi:31 Fi:16 FL}



static void Test_BFu31i_BFu16i_Ul()
{
  {
    init_simple_test("BFu31i_BFu16i_Ul");
    static STRUCT_IF_C BFu31i_BFu16i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu16i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_Ul");
    check_field_offset(lv, v3, 8, "BFu31i_BFu16i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_Ul, BFu31i_BFu16i_Ul)
//============================================================================


struct  BFu31i_BFu16i_Us  {
  unsigned int v1:31;
  unsigned int v2:16;
  unsigned short v3;
};
//SIG(1 BFu31i_BFu16i_Us) C1{ Fi:31 Fi:16 Fs}



static void Test_BFu31i_BFu16i_Us()
{
  {
    init_simple_test("BFu31i_BFu16i_Us");
    static STRUCT_IF_C BFu31i_BFu16i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_Us");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_Us");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_Us");
    check_field_offset(lv, v3, 6, "BFu31i_BFu16i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_Us, BFu31i_BFu16i_Us)
//============================================================================


struct  BFu31i_BFu16i_Vp  {
  unsigned int v1:31;
  unsigned int v2:16;
  void *v3;
};
//SIG(1 BFu31i_BFu16i_Vp) C1{ Fi:31 Fi:16 Fp}



static void Test_BFu31i_BFu16i_Vp()
{
  {
    init_simple_test("BFu31i_BFu16i_Vp");
    static STRUCT_IF_C BFu31i_BFu16i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu16i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_Vp");
    check_field_offset(lv, v3, 8, "BFu31i_BFu16i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16i_Vp, BFu31i_BFu16i_Vp)
//============================================================================


struct  BFu31i_BFu16ll  {
  unsigned int v1:31;
  __tsu64 v2:16;
};
//SIG(1 BFu31i_BFu16ll) C1{ Fi:31 FL:16}



static void Test_BFu31i_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll, BFu31i_BFu16ll)
//============================================================================


struct  BFu31i_BFu16ll_BFu15i  {
  unsigned int v1:31;
  __tsu64 v2:16;
  unsigned int v3:15;
};
//SIG(1 BFu31i_BFu16ll_BFu15i) C1{ Fi:31 FL:16 Fi:15}



static void Test_BFu31i_BFu16ll_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu16ll_BFu15i");
    static STRUCT_IF_C BFu31i_BFu16ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 5, 7, 15, 1, "BFu31i_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 5, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu16ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_BFu15i, BFu31i_BFu16ll_BFu15i)
//============================================================================


struct  BFu31i_BFu16ll_BFu15ll  {
  unsigned int v1:31;
  __tsu64 v2:16;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_BFu16ll_BFu15ll) C1{ Fi:31 FL:16 FL:15}



static void Test_BFu31i_BFu16ll_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu16ll_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu16ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 5, 7, 15, 1, "BFu31i_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 5, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu16ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_BFu15ll, BFu31i_BFu16ll_BFu15ll)
//============================================================================


struct  BFu31i_BFu16ll_BFu15s  {
  unsigned int v1:31;
  __tsu64 v2:16;
  unsigned short v3:15;
};
//SIG(1 BFu31i_BFu16ll_BFu15s) C1{ Fi:31 FL:16 Fs:15}



static void Test_BFu31i_BFu16ll_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu16ll_BFu15s");
    static STRUCT_IF_C BFu31i_BFu16ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu16ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_BFu15s, BFu31i_BFu16ll_BFu15s)
//============================================================================


struct  BFu31i_BFu16ll_BFu16i  {
  unsigned int v1:31;
  __tsu64 v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu31i_BFu16ll_BFu16i) C1{ Fi:31 FL:16 Fi:16}



static void Test_BFu31i_BFu16ll_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu16ll_BFu16i");
    static STRUCT_IF_C BFu31i_BFu16ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 5, 7, 16, 1, "BFu31i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 5, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_BFu16i, BFu31i_BFu16ll_BFu16i)
//============================================================================


struct  BFu31i_BFu16ll_BFu16ll  {
  unsigned int v1:31;
  __tsu64 v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_BFu16ll_BFu16ll) C1{ Fi:31 FL:16 FL:16}



static void Test_BFu31i_BFu16ll_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu16ll_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu16ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 5, 7, 16, 1, "BFu31i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 5, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_BFu16ll, BFu31i_BFu16ll_BFu16ll)
//============================================================================


struct  BFu31i_BFu16ll_BFu16s  {
  unsigned int v1:31;
  __tsu64 v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu31i_BFu16ll_BFu16s) C1{ Fi:31 FL:16 Fs:16}



static void Test_BFu31i_BFu16ll_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu16ll_BFu16s");
    static STRUCT_IF_C BFu31i_BFu16ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_BFu16s, BFu31i_BFu16ll_BFu16s)
//============================================================================


struct  BFu31i_BFu16ll_BFu17i  {
  unsigned int v1:31;
  __tsu64 v2:16;
  unsigned int v3:17;
};
//SIG(1 BFu31i_BFu16ll_BFu17i) C1{ Fi:31 FL:16 Fi:17}



static void Test_BFu31i_BFu16ll_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu16ll_BFu17i");
    static STRUCT_IF_C BFu31i_BFu16ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 5, 7, 17, 1, "BFu31i_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 5, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu16ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_BFu17i, BFu31i_BFu16ll_BFu17i)
//============================================================================


struct  BFu31i_BFu16ll_BFu17ll  {
  unsigned int v1:31;
  __tsu64 v2:16;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_BFu16ll_BFu17ll) C1{ Fi:31 FL:16 FL:17}



static void Test_BFu31i_BFu16ll_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu16ll_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu16ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 5, 7, 17, 1, "BFu31i_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 5, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu16ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_BFu17ll, BFu31i_BFu16ll_BFu17ll)
//============================================================================


struct  BFu31i_BFu16ll_BFu1c  {
  unsigned int v1:31;
  __tsu64 v2:16;
  unsigned char v3:1;
};
//SIG(1 BFu31i_BFu16ll_BFu1c) C1{ Fi:31 FL:16 Fc:1}



static void Test_BFu31i_BFu16ll_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu16ll_BFu1c");
    static STRUCT_IF_C BFu31i_BFu16ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu1c");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu31i_BFu16ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_BFu1c, BFu31i_BFu16ll_BFu1c)
//============================================================================


struct  BFu31i_BFu16ll_BFu1i  {
  unsigned int v1:31;
  __tsu64 v2:16;
  unsigned int v3:1;
};
//SIG(1 BFu31i_BFu16ll_BFu1i) C1{ Fi:31 FL:16 Fi:1}



static void Test_BFu31i_BFu16ll_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu16ll_BFu1i");
    static STRUCT_IF_C BFu31i_BFu16ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu1i");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu31i_BFu16ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_BFu1i, BFu31i_BFu16ll_BFu1i)
//============================================================================


struct  BFu31i_BFu16ll_BFu1ll  {
  unsigned int v1:31;
  __tsu64 v2:16;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_BFu16ll_BFu1ll) C1{ Fi:31 FL:16 FL:1}



static void Test_BFu31i_BFu16ll_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu16ll_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu16ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu31i_BFu16ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_BFu1ll, BFu31i_BFu16ll_BFu1ll)
//============================================================================


struct  BFu31i_BFu16ll_BFu1s  {
  unsigned int v1:31;
  __tsu64 v2:16;
  unsigned short v3:1;
};
//SIG(1 BFu31i_BFu16ll_BFu1s) C1{ Fi:31 FL:16 Fs:1}



static void Test_BFu31i_BFu16ll_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu16ll_BFu1s");
    static STRUCT_IF_C BFu31i_BFu16ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu1s");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu31i_BFu16ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_BFu1s, BFu31i_BFu16ll_BFu1s)
//============================================================================


struct  BFu31i_BFu16ll_BFu31i  {
  unsigned int v1:31;
  __tsu64 v2:16;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFu16ll_BFu31i) C1{ Fi:31 FL:16 Fi:31}



static void Test_BFu31i_BFu16ll_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu16ll_BFu31i");
    static STRUCT_IF_C BFu31i_BFu16ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu16ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_BFu31i, BFu31i_BFu16ll_BFu31i)
//============================================================================


struct  BFu31i_BFu16ll_BFu31ll  {
  unsigned int v1:31;
  __tsu64 v2:16;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFu16ll_BFu31ll) C1{ Fi:31 FL:16 FL:31}



static void Test_BFu31i_BFu16ll_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu16ll_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu16ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu16ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 31, 1, "BFu31i_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_BFu31ll, BFu31i_BFu16ll_BFu31ll)
//============================================================================


struct  BFu31i_BFu16ll_BFu32i  {
  unsigned int v1:31;
  __tsu64 v2:16;
  unsigned int v3:32;
};
//SIG(1 BFu31i_BFu16ll_BFu32i) C1{ Fi:31 FL:16 Fi:32}



static void Test_BFu31i_BFu16ll_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu16ll_BFu32i");
    static STRUCT_IF_C BFu31i_BFu16ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu16ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu16ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_BFu32i, BFu31i_BFu16ll_BFu32i)
//============================================================================


struct  BFu31i_BFu16ll_BFu32ll  {
  unsigned int v1:31;
  __tsu64 v2:16;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_BFu16ll_BFu32ll) C1{ Fi:31 FL:16 FL:32}



static void Test_BFu31i_BFu16ll_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu16ll_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu16ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu16ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 32, 1, "BFu31i_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu31i_BFu16ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_BFu32ll, BFu31i_BFu16ll_BFu32ll)
//============================================================================


struct  BFu31i_BFu16ll_BFu33  {
  unsigned int v1:31;
  __tsu64 v2:16;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_BFu16ll_BFu33) C1{ Fi:31 FL:16 FL:33}



static void Test_BFu31i_BFu16ll_BFu33()
{
  {
    init_simple_test("BFu31i_BFu16ll_BFu33");
    static STRUCT_IF_C BFu31i_BFu16ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu16ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 33, 1, "BFu31i_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu31i_BFu16ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_BFu33, BFu31i_BFu16ll_BFu33)
//============================================================================


struct  BFu31i_BFu16ll_BFu7c  {
  unsigned int v1:31;
  __tsu64 v2:16;
  unsigned char v3:7;
};
//SIG(1 BFu31i_BFu16ll_BFu7c) C1{ Fi:31 FL:16 Fc:7}



static void Test_BFu31i_BFu16ll_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu16ll_BFu7c");
    static STRUCT_IF_C BFu31i_BFu16ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31i_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu16ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_BFu7c, BFu31i_BFu16ll_BFu7c)
//============================================================================


struct  BFu31i_BFu16ll_BFu7i  {
  unsigned int v1:31;
  __tsu64 v2:16;
  unsigned int v3:7;
};
//SIG(1 BFu31i_BFu16ll_BFu7i) C1{ Fi:31 FL:16 Fi:7}



static void Test_BFu31i_BFu16ll_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu16ll_BFu7i");
    static STRUCT_IF_C BFu31i_BFu16ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 5, 7, 7, 1, "BFu31i_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 5, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu16ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_BFu7i, BFu31i_BFu16ll_BFu7i)
//============================================================================


struct  BFu31i_BFu16ll_BFu7ll  {
  unsigned int v1:31;
  __tsu64 v2:16;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_BFu16ll_BFu7ll) C1{ Fi:31 FL:16 FL:7}



static void Test_BFu31i_BFu16ll_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu16ll_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu16ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 5, 7, 7, 1, "BFu31i_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 5, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu16ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_BFu7ll, BFu31i_BFu16ll_BFu7ll)
//============================================================================


struct  BFu31i_BFu16ll_BFu7s  {
  unsigned int v1:31;
  __tsu64 v2:16;
  unsigned short v3:7;
};
//SIG(1 BFu31i_BFu16ll_BFu7s) C1{ Fi:31 FL:16 Fs:7}



static void Test_BFu31i_BFu16ll_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu16ll_BFu7s");
    static STRUCT_IF_C BFu31i_BFu16ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31i_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu16ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_BFu7s, BFu31i_BFu16ll_BFu7s)
//============================================================================


struct  BFu31i_BFu16ll_BFu8c  {
  unsigned int v1:31;
  __tsu64 v2:16;
  unsigned char v3:8;
};
//SIG(1 BFu31i_BFu16ll_BFu8c) C1{ Fi:31 FL:16 Fc:8}



static void Test_BFu31i_BFu16ll_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu16ll_BFu8c");
    static STRUCT_IF_C BFu31i_BFu16ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu16ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_BFu8c, BFu31i_BFu16ll_BFu8c)
//============================================================================


struct  BFu31i_BFu16ll_BFu8i  {
  unsigned int v1:31;
  __tsu64 v2:16;
  unsigned int v3:8;
};
//SIG(1 BFu31i_BFu16ll_BFu8i) C1{ Fi:31 FL:16 Fi:8}



static void Test_BFu31i_BFu16ll_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu16ll_BFu8i");
    static STRUCT_IF_C BFu31i_BFu16ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 5, 7, 8, 1, "BFu31i_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 5, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu16ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_BFu8i, BFu31i_BFu16ll_BFu8i)
//============================================================================


struct  BFu31i_BFu16ll_BFu8ll  {
  unsigned int v1:31;
  __tsu64 v2:16;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_BFu16ll_BFu8ll) C1{ Fi:31 FL:16 FL:8}



static void Test_BFu31i_BFu16ll_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu16ll_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu16ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 5, 7, 8, 1, "BFu31i_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 5, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu16ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_BFu8ll, BFu31i_BFu16ll_BFu8ll)
//============================================================================


struct  BFu31i_BFu16ll_BFu8s  {
  unsigned int v1:31;
  __tsu64 v2:16;
  unsigned short v3:8;
};
//SIG(1 BFu31i_BFu16ll_BFu8s) C1{ Fi:31 FL:16 Fs:8}



static void Test_BFu31i_BFu16ll_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu16ll_BFu8s");
    static STRUCT_IF_C BFu31i_BFu16ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu16ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_BFu8s, BFu31i_BFu16ll_BFu8s)
//============================================================================


struct  BFu31i_BFu16ll_BFu9i  {
  unsigned int v1:31;
  __tsu64 v2:16;
  unsigned int v3:9;
};
//SIG(1 BFu31i_BFu16ll_BFu9i) C1{ Fi:31 FL:16 Fi:9}



static void Test_BFu31i_BFu16ll_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu16ll_BFu9i");
    static STRUCT_IF_C BFu31i_BFu16ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 5, 7, 9, 1, "BFu31i_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 5, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu16ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_BFu9i, BFu31i_BFu16ll_BFu9i)
//============================================================================


struct  BFu31i_BFu16ll_BFu9ll  {
  unsigned int v1:31;
  __tsu64 v2:16;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_BFu16ll_BFu9ll) C1{ Fi:31 FL:16 FL:9}



static void Test_BFu31i_BFu16ll_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu16ll_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu16ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 5, 7, 9, 1, "BFu31i_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 5, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu16ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_BFu9ll, BFu31i_BFu16ll_BFu9ll)
//============================================================================


struct  BFu31i_BFu16ll_BFu9s  {
  unsigned int v1:31;
  __tsu64 v2:16;
  unsigned short v3:9;
};
//SIG(1 BFu31i_BFu16ll_BFu9s) C1{ Fi:31 FL:16 Fs:9}



static void Test_BFu31i_BFu16ll_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu16ll_BFu9s");
    static STRUCT_IF_C BFu31i_BFu16ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31i_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu16ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_BFu9s, BFu31i_BFu16ll_BFu9s)
//============================================================================


struct  BFu31i_BFu16ll_C  {
  unsigned int v1:31;
  __tsu64 v2:16;
  char v3;
};
//SIG(1 BFu31i_BFu16ll_C) C1{ Fi:31 FL:16 Fc}



static void Test_BFu31i_BFu16ll_C()
{
  {
    init_simple_test("BFu31i_BFu16ll_C");
    static STRUCT_IF_C BFu31i_BFu16ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_C");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_C");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_C");
    check_field_offset(lv, v3, 6, "BFu31i_BFu16ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_C, BFu31i_BFu16ll_C)
//============================================================================


struct  BFu31i_BFu16ll_D  {
  unsigned int v1:31;
  __tsu64 v2:16;
  double v3;
};
//SIG(1 BFu31i_BFu16ll_D) C1{ Fi:31 FL:16 FL}



static void Test_BFu31i_BFu16ll_D()
{
  {
    init_simple_test("BFu31i_BFu16ll_D");
    static STRUCT_IF_C BFu31i_BFu16ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu16ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_D");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_D");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_D");
    check_field_offset(lv, v3, 8, "BFu31i_BFu16ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_D, BFu31i_BFu16ll_D)
//============================================================================


struct  BFu31i_BFu16ll_F  {
  unsigned int v1:31;
  __tsu64 v2:16;
  float v3;
};
//SIG(1 BFu31i_BFu16ll_F) C1{ Fi:31 FL:16 Fi}



static void Test_BFu31i_BFu16ll_F()
{
  {
    init_simple_test("BFu31i_BFu16ll_F");
    static STRUCT_IF_C BFu31i_BFu16ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu16ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_F");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_F");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_F");
    check_field_offset(lv, v3, 8, "BFu31i_BFu16ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_F, BFu31i_BFu16ll_F)
//============================================================================


struct  BFu31i_BFu16ll_I  {
  unsigned int v1:31;
  __tsu64 v2:16;
  int v3;
};
//SIG(1 BFu31i_BFu16ll_I) C1{ Fi:31 FL:16 Fi}



static void Test_BFu31i_BFu16ll_I()
{
  {
    init_simple_test("BFu31i_BFu16ll_I");
    static STRUCT_IF_C BFu31i_BFu16ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu16ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_I");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_I");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_I");
    check_field_offset(lv, v3, 8, "BFu31i_BFu16ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_I, BFu31i_BFu16ll_I)
//============================================================================


struct  BFu31i_BFu16ll_Ip  {
  unsigned int v1:31;
  __tsu64 v2:16;
  int *v3;
};
//SIG(1 BFu31i_BFu16ll_Ip) C1{ Fi:31 FL:16 Fp}



static void Test_BFu31i_BFu16ll_Ip()
{
  {
    init_simple_test("BFu31i_BFu16ll_Ip");
    static STRUCT_IF_C BFu31i_BFu16ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu16ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_Ip");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_Ip");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_Ip");
    check_field_offset(lv, v3, 8, "BFu31i_BFu16ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_Ip, BFu31i_BFu16ll_Ip)
//============================================================================


struct  BFu31i_BFu16ll_L  {
  unsigned int v1:31;
  __tsu64 v2:16;
  __tsi64 v3;
};
//SIG(1 BFu31i_BFu16ll_L) C1{ Fi:31 FL:16 FL}



static void Test_BFu31i_BFu16ll_L()
{
  {
    init_simple_test("BFu31i_BFu16ll_L");
    static STRUCT_IF_C BFu31i_BFu16ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu16ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_L");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_L");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_L");
    check_field_offset(lv, v3, 8, "BFu31i_BFu16ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_L, BFu31i_BFu16ll_L)
//============================================================================


struct  BFu31i_BFu16ll_S  {
  unsigned int v1:31;
  __tsu64 v2:16;
  short v3;
};
//SIG(1 BFu31i_BFu16ll_S) C1{ Fi:31 FL:16 Fs}



static void Test_BFu31i_BFu16ll_S()
{
  {
    init_simple_test("BFu31i_BFu16ll_S");
    static STRUCT_IF_C BFu31i_BFu16ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_S");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_S");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_S");
    check_field_offset(lv, v3, 6, "BFu31i_BFu16ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_S, BFu31i_BFu16ll_S)
//============================================================================


struct  BFu31i_BFu16ll_Uc  {
  unsigned int v1:31;
  __tsu64 v2:16;
  unsigned char v3;
};
//SIG(1 BFu31i_BFu16ll_Uc) C1{ Fi:31 FL:16 Fc}



static void Test_BFu31i_BFu16ll_Uc()
{
  {
    init_simple_test("BFu31i_BFu16ll_Uc");
    static STRUCT_IF_C BFu31i_BFu16ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_Uc");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_Uc");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_Uc");
    check_field_offset(lv, v3, 6, "BFu31i_BFu16ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_Uc, BFu31i_BFu16ll_Uc)
//============================================================================


struct  BFu31i_BFu16ll_Ui  {
  unsigned int v1:31;
  __tsu64 v2:16;
  unsigned int v3;
};
//SIG(1 BFu31i_BFu16ll_Ui) C1{ Fi:31 FL:16 Fi}



static void Test_BFu31i_BFu16ll_Ui()
{
  {
    init_simple_test("BFu31i_BFu16ll_Ui");
    static STRUCT_IF_C BFu31i_BFu16ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu16ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_Ui");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_Ui");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_Ui");
    check_field_offset(lv, v3, 8, "BFu31i_BFu16ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_Ui, BFu31i_BFu16ll_Ui)
//============================================================================


struct  BFu31i_BFu16ll_Ul  {
  unsigned int v1:31;
  __tsu64 v2:16;
  __tsu64 v3;
};
//SIG(1 BFu31i_BFu16ll_Ul) C1{ Fi:31 FL:16 FL}



static void Test_BFu31i_BFu16ll_Ul()
{
  {
    init_simple_test("BFu31i_BFu16ll_Ul");
    static STRUCT_IF_C BFu31i_BFu16ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu16ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_Ul");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_Ul");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_Ul");
    check_field_offset(lv, v3, 8, "BFu31i_BFu16ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_Ul, BFu31i_BFu16ll_Ul)
//============================================================================


struct  BFu31i_BFu16ll_Us  {
  unsigned int v1:31;
  __tsu64 v2:16;
  unsigned short v3;
};
//SIG(1 BFu31i_BFu16ll_Us) C1{ Fi:31 FL:16 Fs}



static void Test_BFu31i_BFu16ll_Us()
{
  {
    init_simple_test("BFu31i_BFu16ll_Us");
    static STRUCT_IF_C BFu31i_BFu16ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_Us");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_Us");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_Us");
    check_field_offset(lv, v3, 6, "BFu31i_BFu16ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_Us, BFu31i_BFu16ll_Us)
//============================================================================


struct  BFu31i_BFu16ll_Vp  {
  unsigned int v1:31;
  __tsu64 v2:16;
  void *v3;
};
//SIG(1 BFu31i_BFu16ll_Vp) C1{ Fi:31 FL:16 Fp}



static void Test_BFu31i_BFu16ll_Vp()
{
  {
    init_simple_test("BFu31i_BFu16ll_Vp");
    static STRUCT_IF_C BFu31i_BFu16ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu16ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_Vp");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_Vp");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_Vp");
    check_field_offset(lv, v3, 8, "BFu31i_BFu16ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16ll_Vp, BFu31i_BFu16ll_Vp)
//============================================================================


struct  BFu31i_BFu16s  {
  unsigned int v1:31;
  unsigned short v2:16;
};
//SIG(1 BFu31i_BFu16s) C1{ Fi:31 Fs:16}



static void Test_BFu31i_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu16s");
    static STRUCT_IF_C BFu31i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s, BFu31i_BFu16s)
//============================================================================


struct  BFu31i_BFu16s_BFu15i  {
  unsigned int v1:31;
  unsigned short v2:16;
  unsigned int v3:15;
};
//SIG(1 BFu31i_BFu16s_BFu15i) C1{ Fi:31 Fs:16 Fi:15}



static void Test_BFu31i_BFu16s_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu16s_BFu15i");
    static STRUCT_IF_C BFu31i_BFu16s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu16s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_BFu15i, BFu31i_BFu16s_BFu15i)
//============================================================================


struct  BFu31i_BFu16s_BFu15ll  {
  unsigned int v1:31;
  unsigned short v2:16;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_BFu16s_BFu15ll) C1{ Fi:31 Fs:16 FL:15}



static void Test_BFu31i_BFu16s_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu16s_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu16s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu16s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_BFu15ll, BFu31i_BFu16s_BFu15ll)
//============================================================================


struct  BFu31i_BFu16s_BFu15s  {
  unsigned int v1:31;
  unsigned short v2:16;
  unsigned short v3:15;
};
//SIG(1 BFu31i_BFu16s_BFu15s) C1{ Fi:31 Fs:16 Fs:15}



static void Test_BFu31i_BFu16s_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu16s_BFu15s");
    static STRUCT_IF_C BFu31i_BFu16s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu16s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_BFu15s, BFu31i_BFu16s_BFu15s)
//============================================================================


struct  BFu31i_BFu16s_BFu16i  {
  unsigned int v1:31;
  unsigned short v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu31i_BFu16s_BFu16i) C1{ Fi:31 Fs:16 Fi:16}



static void Test_BFu31i_BFu16s_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu16s_BFu16i");
    static STRUCT_IF_C BFu31i_BFu16s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_BFu16i, BFu31i_BFu16s_BFu16i)
//============================================================================


struct  BFu31i_BFu16s_BFu16ll  {
  unsigned int v1:31;
  unsigned short v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_BFu16s_BFu16ll) C1{ Fi:31 Fs:16 FL:16}



static void Test_BFu31i_BFu16s_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu16s_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu16s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_BFu16ll, BFu31i_BFu16s_BFu16ll)
//============================================================================


struct  BFu31i_BFu16s_BFu16s  {
  unsigned int v1:31;
  unsigned short v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu31i_BFu16s_BFu16s) C1{ Fi:31 Fs:16 Fs:16}



static void Test_BFu31i_BFu16s_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu16s_BFu16s");
    static STRUCT_IF_C BFu31i_BFu16s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_BFu16s, BFu31i_BFu16s_BFu16s)
//============================================================================


struct  BFu31i_BFu16s_BFu17i  {
  unsigned int v1:31;
  unsigned short v2:16;
  unsigned int v3:17;
};
//SIG(1 BFu31i_BFu16s_BFu17i) C1{ Fi:31 Fs:16 Fi:17}



static void Test_BFu31i_BFu16s_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu16s_BFu17i");
    static STRUCT_IF_C BFu31i_BFu16s_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu16s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31i_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu16s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_BFu17i, BFu31i_BFu16s_BFu17i)
//============================================================================


struct  BFu31i_BFu16s_BFu17ll  {
  unsigned int v1:31;
  unsigned short v2:16;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_BFu16s_BFu17ll) C1{ Fi:31 Fs:16 FL:17}



static void Test_BFu31i_BFu16s_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu16s_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu16s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu16s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, 1, "BFu31i_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, hide_ull(1LL<<16), "BFu31i_BFu16s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_BFu17ll, BFu31i_BFu16s_BFu17ll)
//============================================================================


struct  BFu31i_BFu16s_BFu1c  {
  unsigned int v1:31;
  unsigned short v2:16;
  unsigned char v3:1;
};
//SIG(1 BFu31i_BFu16s_BFu1c) C1{ Fi:31 Fs:16 Fc:1}



static void Test_BFu31i_BFu16s_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu16s_BFu1c");
    static STRUCT_IF_C BFu31i_BFu16s_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu1c");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31i_BFu16s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_BFu1c, BFu31i_BFu16s_BFu1c)
//============================================================================


struct  BFu31i_BFu16s_BFu1i  {
  unsigned int v1:31;
  unsigned short v2:16;
  unsigned int v3:1;
};
//SIG(1 BFu31i_BFu16s_BFu1i) C1{ Fi:31 Fs:16 Fi:1}



static void Test_BFu31i_BFu16s_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu16s_BFu1i");
    static STRUCT_IF_C BFu31i_BFu16s_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu1i");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31i_BFu16s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_BFu1i, BFu31i_BFu16s_BFu1i)
//============================================================================


struct  BFu31i_BFu16s_BFu1ll  {
  unsigned int v1:31;
  unsigned short v2:16;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_BFu16s_BFu1ll) C1{ Fi:31 Fs:16 FL:1}



static void Test_BFu31i_BFu16s_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu16s_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu16s_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu1ll");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31i_BFu16s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_BFu1ll, BFu31i_BFu16s_BFu1ll)
//============================================================================


struct  BFu31i_BFu16s_BFu1s  {
  unsigned int v1:31;
  unsigned short v2:16;
  unsigned short v3:1;
};
//SIG(1 BFu31i_BFu16s_BFu1s) C1{ Fi:31 Fs:16 Fs:1}



static void Test_BFu31i_BFu16s_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu16s_BFu1s");
    static STRUCT_IF_C BFu31i_BFu16s_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu1s");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31i_BFu16s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_BFu1s, BFu31i_BFu16s_BFu1s)
//============================================================================


struct  BFu31i_BFu16s_BFu31i  {
  unsigned int v1:31;
  unsigned short v2:16;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFu16s_BFu31i) C1{ Fi:31 Fs:16 Fi:31}



static void Test_BFu31i_BFu16s_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu16s_BFu31i");
    static STRUCT_IF_C BFu31i_BFu16s_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu16s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_BFu31i, BFu31i_BFu16s_BFu31i)
//============================================================================


struct  BFu31i_BFu16s_BFu31ll  {
  unsigned int v1:31;
  unsigned short v2:16;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFu16s_BFu31ll) C1{ Fi:31 Fs:16 FL:31}



static void Test_BFu31i_BFu16s_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu16s_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu16s_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu16s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, 1, "BFu31i_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_BFu31ll, BFu31i_BFu16s_BFu31ll)
//============================================================================


struct  BFu31i_BFu16s_BFu32i  {
  unsigned int v1:31;
  unsigned short v2:16;
  unsigned int v3:32;
};
//SIG(1 BFu31i_BFu16s_BFu32i) C1{ Fi:31 Fs:16 Fi:32}



static void Test_BFu31i_BFu16s_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu16s_BFu32i");
    static STRUCT_IF_C BFu31i_BFu16s_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu16s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu16s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_BFu32i, BFu31i_BFu16s_BFu32i)
//============================================================================


struct  BFu31i_BFu16s_BFu32ll  {
  unsigned int v1:31;
  unsigned short v2:16;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_BFu16s_BFu32ll) C1{ Fi:31 Fs:16 FL:32}



static void Test_BFu31i_BFu16s_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu16s_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu16s_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu16s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, 1, "BFu31i_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, hide_ull(1LL<<31), "BFu31i_BFu16s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_BFu32ll, BFu31i_BFu16s_BFu32ll)
//============================================================================


struct  BFu31i_BFu16s_BFu33  {
  unsigned int v1:31;
  unsigned short v2:16;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_BFu16s_BFu33) C1{ Fi:31 Fs:16 FL:33}



static void Test_BFu31i_BFu16s_BFu33()
{
  {
    init_simple_test("BFu31i_BFu16s_BFu33");
    static STRUCT_IF_C BFu31i_BFu16s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu16s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, 1, "BFu31i_BFu16s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, hide_ull(1LL<<32), "BFu31i_BFu16s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_BFu33, BFu31i_BFu16s_BFu33)
//============================================================================


struct  BFu31i_BFu16s_BFu7c  {
  unsigned int v1:31;
  unsigned short v2:16;
  unsigned char v3:7;
};
//SIG(1 BFu31i_BFu16s_BFu7c) C1{ Fi:31 Fs:16 Fc:7}



static void Test_BFu31i_BFu16s_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu16s_BFu7c");
    static STRUCT_IF_C BFu31i_BFu16s_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31i_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu16s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_BFu7c, BFu31i_BFu16s_BFu7c)
//============================================================================


struct  BFu31i_BFu16s_BFu7i  {
  unsigned int v1:31;
  unsigned short v2:16;
  unsigned int v3:7;
};
//SIG(1 BFu31i_BFu16s_BFu7i) C1{ Fi:31 Fs:16 Fi:7}



static void Test_BFu31i_BFu16s_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu16s_BFu7i");
    static STRUCT_IF_C BFu31i_BFu16s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31i_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu16s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_BFu7i, BFu31i_BFu16s_BFu7i)
//============================================================================


struct  BFu31i_BFu16s_BFu7ll  {
  unsigned int v1:31;
  unsigned short v2:16;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_BFu16s_BFu7ll) C1{ Fi:31 Fs:16 FL:7}



static void Test_BFu31i_BFu16s_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu16s_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu16s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31i_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu16s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_BFu7ll, BFu31i_BFu16s_BFu7ll)
//============================================================================


struct  BFu31i_BFu16s_BFu7s  {
  unsigned int v1:31;
  unsigned short v2:16;
  unsigned short v3:7;
};
//SIG(1 BFu31i_BFu16s_BFu7s) C1{ Fi:31 Fs:16 Fs:7}



static void Test_BFu31i_BFu16s_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu16s_BFu7s");
    static STRUCT_IF_C BFu31i_BFu16s_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31i_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu16s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_BFu7s, BFu31i_BFu16s_BFu7s)
//============================================================================


struct  BFu31i_BFu16s_BFu8c  {
  unsigned int v1:31;
  unsigned short v2:16;
  unsigned char v3:8;
};
//SIG(1 BFu31i_BFu16s_BFu8c) C1{ Fi:31 Fs:16 Fc:8}



static void Test_BFu31i_BFu16s_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu16s_BFu8c");
    static STRUCT_IF_C BFu31i_BFu16s_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu16s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_BFu8c, BFu31i_BFu16s_BFu8c)
//============================================================================


struct  BFu31i_BFu16s_BFu8i  {
  unsigned int v1:31;
  unsigned short v2:16;
  unsigned int v3:8;
};
//SIG(1 BFu31i_BFu16s_BFu8i) C1{ Fi:31 Fs:16 Fi:8}



static void Test_BFu31i_BFu16s_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu16s_BFu8i");
    static STRUCT_IF_C BFu31i_BFu16s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu16s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_BFu8i, BFu31i_BFu16s_BFu8i)
//============================================================================


struct  BFu31i_BFu16s_BFu8ll  {
  unsigned int v1:31;
  unsigned short v2:16;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_BFu16s_BFu8ll) C1{ Fi:31 Fs:16 FL:8}



static void Test_BFu31i_BFu16s_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu16s_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu16s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu16s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_BFu8ll, BFu31i_BFu16s_BFu8ll)
//============================================================================


struct  BFu31i_BFu16s_BFu8s  {
  unsigned int v1:31;
  unsigned short v2:16;
  unsigned short v3:8;
};
//SIG(1 BFu31i_BFu16s_BFu8s) C1{ Fi:31 Fs:16 Fs:8}



static void Test_BFu31i_BFu16s_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu16s_BFu8s");
    static STRUCT_IF_C BFu31i_BFu16s_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu16s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_BFu8s, BFu31i_BFu16s_BFu8s)
//============================================================================


struct  BFu31i_BFu16s_BFu9i  {
  unsigned int v1:31;
  unsigned short v2:16;
  unsigned int v3:9;
};
//SIG(1 BFu31i_BFu16s_BFu9i) C1{ Fi:31 Fs:16 Fi:9}



static void Test_BFu31i_BFu16s_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu16s_BFu9i");
    static STRUCT_IF_C BFu31i_BFu16s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31i_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu16s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_BFu9i, BFu31i_BFu16s_BFu9i)
//============================================================================


struct  BFu31i_BFu16s_BFu9ll  {
  unsigned int v1:31;
  unsigned short v2:16;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_BFu16s_BFu9ll) C1{ Fi:31 Fs:16 FL:9}



static void Test_BFu31i_BFu16s_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu16s_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu16s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31i_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu16s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_BFu9ll, BFu31i_BFu16s_BFu9ll)
//============================================================================


struct  BFu31i_BFu16s_BFu9s  {
  unsigned int v1:31;
  unsigned short v2:16;
  unsigned short v3:9;
};
//SIG(1 BFu31i_BFu16s_BFu9s) C1{ Fi:31 Fs:16 Fs:9}



static void Test_BFu31i_BFu16s_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu16s_BFu9s");
    static STRUCT_IF_C BFu31i_BFu16s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31i_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu16s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_BFu9s, BFu31i_BFu16s_BFu9s)
//============================================================================


struct  BFu31i_BFu16s_C  {
  unsigned int v1:31;
  unsigned short v2:16;
  char v3;
};
//SIG(1 BFu31i_BFu16s_C) C1{ Fi:31 Fs:16 Fc}



static void Test_BFu31i_BFu16s_C()
{
  {
    init_simple_test("BFu31i_BFu16s_C");
    static STRUCT_IF_C BFu31i_BFu16s_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16s_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16s_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_C");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_C");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_C");
    check_field_offset(lv, v3, 6, "BFu31i_BFu16s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_C, BFu31i_BFu16s_C)
//============================================================================


struct  BFu31i_BFu16s_D  {
  unsigned int v1:31;
  unsigned short v2:16;
  double v3;
};
//SIG(1 BFu31i_BFu16s_D) C1{ Fi:31 Fs:16 FL}



static void Test_BFu31i_BFu16s_D()
{
  {
    init_simple_test("BFu31i_BFu16s_D");
    static STRUCT_IF_C BFu31i_BFu16s_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu16s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16s_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_D");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_D");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_D");
    check_field_offset(lv, v3, 8, "BFu31i_BFu16s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_D, BFu31i_BFu16s_D)
//============================================================================


struct  BFu31i_BFu16s_F  {
  unsigned int v1:31;
  unsigned short v2:16;
  float v3;
};
//SIG(1 BFu31i_BFu16s_F) C1{ Fi:31 Fs:16 Fi}



static void Test_BFu31i_BFu16s_F()
{
  {
    init_simple_test("BFu31i_BFu16s_F");
    static STRUCT_IF_C BFu31i_BFu16s_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu16s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16s_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_F");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_F");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_F");
    check_field_offset(lv, v3, 8, "BFu31i_BFu16s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_F, BFu31i_BFu16s_F)
//============================================================================


struct  BFu31i_BFu16s_I  {
  unsigned int v1:31;
  unsigned short v2:16;
  int v3;
};
//SIG(1 BFu31i_BFu16s_I) C1{ Fi:31 Fs:16 Fi}



static void Test_BFu31i_BFu16s_I()
{
  {
    init_simple_test("BFu31i_BFu16s_I");
    static STRUCT_IF_C BFu31i_BFu16s_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu16s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16s_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_I");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_I");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_I");
    check_field_offset(lv, v3, 8, "BFu31i_BFu16s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_I, BFu31i_BFu16s_I)
//============================================================================


struct  BFu31i_BFu16s_Ip  {
  unsigned int v1:31;
  unsigned short v2:16;
  int *v3;
};
//SIG(1 BFu31i_BFu16s_Ip) C1{ Fi:31 Fs:16 Fp}



static void Test_BFu31i_BFu16s_Ip()
{
  {
    init_simple_test("BFu31i_BFu16s_Ip");
    static STRUCT_IF_C BFu31i_BFu16s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu16s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_Ip");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_Ip");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_Ip");
    check_field_offset(lv, v3, 8, "BFu31i_BFu16s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_Ip, BFu31i_BFu16s_Ip)
//============================================================================


struct  BFu31i_BFu16s_L  {
  unsigned int v1:31;
  unsigned short v2:16;
  __tsi64 v3;
};
//SIG(1 BFu31i_BFu16s_L) C1{ Fi:31 Fs:16 FL}



static void Test_BFu31i_BFu16s_L()
{
  {
    init_simple_test("BFu31i_BFu16s_L");
    static STRUCT_IF_C BFu31i_BFu16s_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu16s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16s_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_L");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_L");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_L");
    check_field_offset(lv, v3, 8, "BFu31i_BFu16s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_L, BFu31i_BFu16s_L)
//============================================================================


struct  BFu31i_BFu16s_S  {
  unsigned int v1:31;
  unsigned short v2:16;
  short v3;
};
//SIG(1 BFu31i_BFu16s_S) C1{ Fi:31 Fs:16 Fs}



static void Test_BFu31i_BFu16s_S()
{
  {
    init_simple_test("BFu31i_BFu16s_S");
    static STRUCT_IF_C BFu31i_BFu16s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16s_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16s_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_S");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_S");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_S");
    check_field_offset(lv, v3, 6, "BFu31i_BFu16s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_S, BFu31i_BFu16s_S)
//============================================================================


struct  BFu31i_BFu16s_Uc  {
  unsigned int v1:31;
  unsigned short v2:16;
  unsigned char v3;
};
//SIG(1 BFu31i_BFu16s_Uc) C1{ Fi:31 Fs:16 Fc}



static void Test_BFu31i_BFu16s_Uc()
{
  {
    init_simple_test("BFu31i_BFu16s_Uc");
    static STRUCT_IF_C BFu31i_BFu16s_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_Uc");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_Uc");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_Uc");
    check_field_offset(lv, v3, 6, "BFu31i_BFu16s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_Uc, BFu31i_BFu16s_Uc)
//============================================================================


struct  BFu31i_BFu16s_Ui  {
  unsigned int v1:31;
  unsigned short v2:16;
  unsigned int v3;
};
//SIG(1 BFu31i_BFu16s_Ui) C1{ Fi:31 Fs:16 Fi}



static void Test_BFu31i_BFu16s_Ui()
{
  {
    init_simple_test("BFu31i_BFu16s_Ui");
    static STRUCT_IF_C BFu31i_BFu16s_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu16s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_Ui");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_Ui");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_Ui");
    check_field_offset(lv, v3, 8, "BFu31i_BFu16s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_Ui, BFu31i_BFu16s_Ui)
//============================================================================


struct  BFu31i_BFu16s_Ul  {
  unsigned int v1:31;
  unsigned short v2:16;
  __tsu64 v3;
};
//SIG(1 BFu31i_BFu16s_Ul) C1{ Fi:31 Fs:16 FL}



static void Test_BFu31i_BFu16s_Ul()
{
  {
    init_simple_test("BFu31i_BFu16s_Ul");
    static STRUCT_IF_C BFu31i_BFu16s_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu16s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_Ul");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_Ul");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_Ul");
    check_field_offset(lv, v3, 8, "BFu31i_BFu16s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_Ul, BFu31i_BFu16s_Ul)
//============================================================================


struct  BFu31i_BFu16s_Us  {
  unsigned int v1:31;
  unsigned short v2:16;
  unsigned short v3;
};
//SIG(1 BFu31i_BFu16s_Us) C1{ Fi:31 Fs:16 Fs}



static void Test_BFu31i_BFu16s_Us()
{
  {
    init_simple_test("BFu31i_BFu16s_Us");
    static STRUCT_IF_C BFu31i_BFu16s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_Us");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_Us");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_Us");
    check_field_offset(lv, v3, 6, "BFu31i_BFu16s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_Us, BFu31i_BFu16s_Us)
//============================================================================


struct  BFu31i_BFu16s_Vp  {
  unsigned int v1:31;
  unsigned short v2:16;
  void *v3;
};
//SIG(1 BFu31i_BFu16s_Vp) C1{ Fi:31 Fs:16 Fp}



static void Test_BFu31i_BFu16s_Vp()
{
  {
    init_simple_test("BFu31i_BFu16s_Vp");
    static STRUCT_IF_C BFu31i_BFu16s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu16s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_Vp");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_Vp");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_Vp");
    check_field_offset(lv, v3, 8, "BFu31i_BFu16s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu16s_Vp, BFu31i_BFu16s_Vp)
//============================================================================


struct  BFu31i_BFu17i  {
  unsigned int v1:31;
  unsigned int v2:17;
};
//SIG(1 BFu31i_BFu17i) C1{ Fi:31 Fi:17}



static void Test_BFu31i_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu17i");
    static STRUCT_IF_C BFu31i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i, BFu31i_BFu17i)
//============================================================================


struct  BFu31i_BFu17i_BFu15i  {
  unsigned int v1:31;
  unsigned int v2:17;
  unsigned int v3:15;
};
//SIG(1 BFu31i_BFu17i_BFu15i) C1{ Fi:31 Fi:17 Fi:15}



static void Test_BFu31i_BFu17i_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu17i_BFu15i");
    static STRUCT_IF_C BFu31i_BFu17i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu17i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 6, 1, 15, 1, "BFu31i_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 6, 1, 15, hide_ull(1LL<<14), "BFu31i_BFu17i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_BFu15i, BFu31i_BFu17i_BFu15i)
//============================================================================


struct  BFu31i_BFu17i_BFu15ll  {
  unsigned int v1:31;
  unsigned int v2:17;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_BFu17i_BFu15ll) C1{ Fi:31 Fi:17 FL:15}



static void Test_BFu31i_BFu17i_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu17i_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu17i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 6, 1, 15, 1, "BFu31i_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 6, 1, 15, hide_ull(1LL<<14), "BFu31i_BFu17i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_BFu15ll, BFu31i_BFu17i_BFu15ll)
//============================================================================


struct  BFu31i_BFu17i_BFu15s  {
  unsigned int v1:31;
  unsigned int v2:17;
  unsigned short v3:15;
};
//SIG(1 BFu31i_BFu17i_BFu15s) C1{ Fi:31 Fi:17 Fs:15}



static void Test_BFu31i_BFu17i_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu17i_BFu15s");
    static STRUCT_IF_C BFu31i_BFu17i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu17i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 6, 1, 15, 1, "BFu31i_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 6, 1, 15, hide_ull(1LL<<14), "BFu31i_BFu17i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_BFu15s, BFu31i_BFu17i_BFu15s)
//============================================================================


struct  BFu31i_BFu17i_BFu16i  {
  unsigned int v1:31;
  unsigned int v2:17;
  unsigned int v3:16;
};
//SIG(1 BFu31i_BFu17i_BFu16i) C1{ Fi:31 Fi:17 Fi:16}



static void Test_BFu31i_BFu17i_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu17i_BFu16i");
    static STRUCT_IF_C BFu31i_BFu17i_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu17i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu17i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31i_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu17i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_BFu16i, BFu31i_BFu17i_BFu16i)
//============================================================================


struct  BFu31i_BFu17i_BFu16ll  {
  unsigned int v1:31;
  unsigned int v2:17;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_BFu17i_BFu16ll) C1{ Fi:31 Fi:17 FL:16}



static void Test_BFu31i_BFu17i_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu17i_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu17i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu17i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 16, 1, "BFu31i_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 16, hide_ull(1LL<<15), "BFu31i_BFu17i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_BFu16ll, BFu31i_BFu17i_BFu16ll)
//============================================================================


struct  BFu31i_BFu17i_BFu16s  {
  unsigned int v1:31;
  unsigned int v2:17;
  unsigned short v3:16;
};
//SIG(1 BFu31i_BFu17i_BFu16s) C1{ Fi:31 Fi:17 Fs:16}



static void Test_BFu31i_BFu17i_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu17i_BFu16s");
    static STRUCT_IF_C BFu31i_BFu17i_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu17i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu17i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31i_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu17i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_BFu16s, BFu31i_BFu17i_BFu16s)
//============================================================================


struct  BFu31i_BFu17i_BFu17i  {
  unsigned int v1:31;
  unsigned int v2:17;
  unsigned int v3:17;
};
//SIG(1 BFu31i_BFu17i_BFu17i) C1{ Fi:31 Fi:17 Fi:17}



static void Test_BFu31i_BFu17i_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu17i_BFu17i");
    static STRUCT_IF_C BFu31i_BFu17i_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu17i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31i_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_BFu17i, BFu31i_BFu17i_BFu17i)
//============================================================================


struct  BFu31i_BFu17i_BFu17ll  {
  unsigned int v1:31;
  unsigned int v2:17;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_BFu17i_BFu17ll) C1{ Fi:31 Fi:17 FL:17}



static void Test_BFu31i_BFu17i_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu17i_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu17i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu31i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_BFu17ll, BFu31i_BFu17i_BFu17ll)
//============================================================================


struct  BFu31i_BFu17i_BFu1c  {
  unsigned int v1:31;
  unsigned int v2:17;
  unsigned char v3:1;
};
//SIG(1 BFu31i_BFu17i_BFu1c) C1{ Fi:31 Fi:17 Fc:1}



static void Test_BFu31i_BFu17i_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu17i_BFu1c");
    static STRUCT_IF_C BFu31i_BFu17i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu17i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu1c");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu31i_BFu17i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_BFu1c, BFu31i_BFu17i_BFu1c)
//============================================================================


struct  BFu31i_BFu17i_BFu1i  {
  unsigned int v1:31;
  unsigned int v2:17;
  unsigned int v3:1;
};
//SIG(1 BFu31i_BFu17i_BFu1i) C1{ Fi:31 Fi:17 Fi:1}



static void Test_BFu31i_BFu17i_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu17i_BFu1i");
    static STRUCT_IF_C BFu31i_BFu17i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu17i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu1i");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu31i_BFu17i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_BFu1i, BFu31i_BFu17i_BFu1i)
//============================================================================


struct  BFu31i_BFu17i_BFu1ll  {
  unsigned int v1:31;
  unsigned int v2:17;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_BFu17i_BFu1ll) C1{ Fi:31 Fi:17 FL:1}



static void Test_BFu31i_BFu17i_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu17i_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu17i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu1ll");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu31i_BFu17i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_BFu1ll, BFu31i_BFu17i_BFu1ll)
//============================================================================


struct  BFu31i_BFu17i_BFu1s  {
  unsigned int v1:31;
  unsigned int v2:17;
  unsigned short v3:1;
};
//SIG(1 BFu31i_BFu17i_BFu1s) C1{ Fi:31 Fi:17 Fs:1}



static void Test_BFu31i_BFu17i_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu17i_BFu1s");
    static STRUCT_IF_C BFu31i_BFu17i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu17i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu1s");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu31i_BFu17i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_BFu1s, BFu31i_BFu17i_BFu1s)
//============================================================================


struct  BFu31i_BFu17i_BFu31i  {
  unsigned int v1:31;
  unsigned int v2:17;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFu17i_BFu31i) C1{ Fi:31 Fi:17 Fi:31}



static void Test_BFu31i_BFu17i_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu17i_BFu31i");
    static STRUCT_IF_C BFu31i_BFu17i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu17i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu17i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_BFu31i, BFu31i_BFu17i_BFu31i)
//============================================================================


struct  BFu31i_BFu17i_BFu31ll  {
  unsigned int v1:31;
  unsigned int v2:17;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFu17i_BFu31ll) C1{ Fi:31 Fi:17 FL:31}



static void Test_BFu31i_BFu17i_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu17i_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu17i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu17i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 31, 1, "BFu31i_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_BFu31ll, BFu31i_BFu17i_BFu31ll)
//============================================================================


struct  BFu31i_BFu17i_BFu32i  {
  unsigned int v1:31;
  unsigned int v2:17;
  unsigned int v3:32;
};
//SIG(1 BFu31i_BFu17i_BFu32i) C1{ Fi:31 Fi:17 Fi:32}



static void Test_BFu31i_BFu17i_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu17i_BFu32i");
    static STRUCT_IF_C BFu31i_BFu17i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu17i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu17i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu17i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_BFu32i, BFu31i_BFu17i_BFu32i)
//============================================================================


struct  BFu31i_BFu17i_BFu32ll  {
  unsigned int v1:31;
  unsigned int v2:17;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_BFu17i_BFu32ll) C1{ Fi:31 Fi:17 FL:32}



static void Test_BFu31i_BFu17i_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu17i_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu17i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu17i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 32, 1, "BFu31i_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 32, hide_ull(1LL<<31), "BFu31i_BFu17i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_BFu32ll, BFu31i_BFu17i_BFu32ll)
//============================================================================


struct  BFu31i_BFu17i_BFu33  {
  unsigned int v1:31;
  unsigned int v2:17;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_BFu17i_BFu33) C1{ Fi:31 Fi:17 FL:33}



static void Test_BFu31i_BFu17i_BFu33()
{
  {
    init_simple_test("BFu31i_BFu17i_BFu33");
    static STRUCT_IF_C BFu31i_BFu17i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu17i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 33, 1, "BFu31i_BFu17i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 33, hide_ull(1LL<<32), "BFu31i_BFu17i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_BFu33, BFu31i_BFu17i_BFu33)
//============================================================================


struct  BFu31i_BFu17i_BFu7c  {
  unsigned int v1:31;
  unsigned int v2:17;
  unsigned char v3:7;
};
//SIG(1 BFu31i_BFu17i_BFu7c) C1{ Fi:31 Fi:17 Fc:7}



static void Test_BFu31i_BFu17i_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu17i_BFu7c");
    static STRUCT_IF_C BFu31i_BFu17i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu17i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu31i_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu31i_BFu17i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_BFu7c, BFu31i_BFu17i_BFu7c)
//============================================================================


struct  BFu31i_BFu17i_BFu7i  {
  unsigned int v1:31;
  unsigned int v2:17;
  unsigned int v3:7;
};
//SIG(1 BFu31i_BFu17i_BFu7i) C1{ Fi:31 Fi:17 Fi:7}



static void Test_BFu31i_BFu17i_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu17i_BFu7i");
    static STRUCT_IF_C BFu31i_BFu17i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu17i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu31i_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu31i_BFu17i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_BFu7i, BFu31i_BFu17i_BFu7i)
//============================================================================


struct  BFu31i_BFu17i_BFu7ll  {
  unsigned int v1:31;
  unsigned int v2:17;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_BFu17i_BFu7ll) C1{ Fi:31 Fi:17 FL:7}



static void Test_BFu31i_BFu17i_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu17i_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu17i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu31i_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu31i_BFu17i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_BFu7ll, BFu31i_BFu17i_BFu7ll)
//============================================================================


struct  BFu31i_BFu17i_BFu7s  {
  unsigned int v1:31;
  unsigned int v2:17;
  unsigned short v3:7;
};
//SIG(1 BFu31i_BFu17i_BFu7s) C1{ Fi:31 Fi:17 Fs:7}



static void Test_BFu31i_BFu17i_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu17i_BFu7s");
    static STRUCT_IF_C BFu31i_BFu17i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu17i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu31i_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu31i_BFu17i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_BFu7s, BFu31i_BFu17i_BFu7s)
//============================================================================


struct  BFu31i_BFu17i_BFu8c  {
  unsigned int v1:31;
  unsigned int v2:17;
  unsigned char v3:8;
};
//SIG(1 BFu31i_BFu17i_BFu8c) C1{ Fi:31 Fi:17 Fc:8}



static void Test_BFu31i_BFu17i_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu17i_BFu8c");
    static STRUCT_IF_C BFu31i_BFu17i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu17i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 7, 0, 8, 1, "BFu31i_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 7, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu17i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_BFu8c, BFu31i_BFu17i_BFu8c)
//============================================================================


struct  BFu31i_BFu17i_BFu8i  {
  unsigned int v1:31;
  unsigned int v2:17;
  unsigned int v3:8;
};
//SIG(1 BFu31i_BFu17i_BFu8i) C1{ Fi:31 Fi:17 Fi:8}



static void Test_BFu31i_BFu17i_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu17i_BFu8i");
    static STRUCT_IF_C BFu31i_BFu17i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu17i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 6, 1, 8, 1, "BFu31i_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 6, 1, 8, hide_ull(1LL<<7), "BFu31i_BFu17i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_BFu8i, BFu31i_BFu17i_BFu8i)
//============================================================================


struct  BFu31i_BFu17i_BFu8ll  {
  unsigned int v1:31;
  unsigned int v2:17;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_BFu17i_BFu8ll) C1{ Fi:31 Fi:17 FL:8}



static void Test_BFu31i_BFu17i_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu17i_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu17i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 6, 1, 8, 1, "BFu31i_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 6, 1, 8, hide_ull(1LL<<7), "BFu31i_BFu17i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_BFu8ll, BFu31i_BFu17i_BFu8ll)
//============================================================================


struct  BFu31i_BFu17i_BFu8s  {
  unsigned int v1:31;
  unsigned int v2:17;
  unsigned short v3:8;
};
//SIG(1 BFu31i_BFu17i_BFu8s) C1{ Fi:31 Fi:17 Fs:8}



static void Test_BFu31i_BFu17i_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu17i_BFu8s");
    static STRUCT_IF_C BFu31i_BFu17i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu17i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 6, 1, 8, 1, "BFu31i_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 6, 1, 8, hide_ull(1LL<<7), "BFu31i_BFu17i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_BFu8s, BFu31i_BFu17i_BFu8s)
//============================================================================


struct  BFu31i_BFu17i_BFu9i  {
  unsigned int v1:31;
  unsigned int v2:17;
  unsigned int v3:9;
};
//SIG(1 BFu31i_BFu17i_BFu9i) C1{ Fi:31 Fi:17 Fi:9}



static void Test_BFu31i_BFu17i_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu17i_BFu9i");
    static STRUCT_IF_C BFu31i_BFu17i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu17i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 6, 1, 9, 1, "BFu31i_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 6, 1, 9, hide_ull(1LL<<8), "BFu31i_BFu17i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_BFu9i, BFu31i_BFu17i_BFu9i)
//============================================================================


struct  BFu31i_BFu17i_BFu9ll  {
  unsigned int v1:31;
  unsigned int v2:17;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_BFu17i_BFu9ll) C1{ Fi:31 Fi:17 FL:9}



static void Test_BFu31i_BFu17i_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu17i_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu17i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 6, 1, 9, 1, "BFu31i_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 6, 1, 9, hide_ull(1LL<<8), "BFu31i_BFu17i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_BFu9ll, BFu31i_BFu17i_BFu9ll)
//============================================================================


struct  BFu31i_BFu17i_BFu9s  {
  unsigned int v1:31;
  unsigned int v2:17;
  unsigned short v3:9;
};
//SIG(1 BFu31i_BFu17i_BFu9s) C1{ Fi:31 Fi:17 Fs:9}



static void Test_BFu31i_BFu17i_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu17i_BFu9s");
    static STRUCT_IF_C BFu31i_BFu17i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu17i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 6, 1, 9, 1, "BFu31i_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 6, 1, 9, hide_ull(1LL<<8), "BFu31i_BFu17i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_BFu9s, BFu31i_BFu17i_BFu9s)
//============================================================================


struct  BFu31i_BFu17i_C  {
  unsigned int v1:31;
  unsigned int v2:17;
  char v3;
};
//SIG(1 BFu31i_BFu17i_C) C1{ Fi:31 Fi:17 Fc}



static void Test_BFu31i_BFu17i_C()
{
  {
    init_simple_test("BFu31i_BFu17i_C");
    static STRUCT_IF_C BFu31i_BFu17i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu17i_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_C");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_C");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_C");
    check_field_offset(lv, v3, 7, "BFu31i_BFu17i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_C, BFu31i_BFu17i_C)
//============================================================================


struct  BFu31i_BFu17i_D  {
  unsigned int v1:31;
  unsigned int v2:17;
  double v3;
};
//SIG(1 BFu31i_BFu17i_D) C1{ Fi:31 Fi:17 FL}



static void Test_BFu31i_BFu17i_D()
{
  {
    init_simple_test("BFu31i_BFu17i_D");
    static STRUCT_IF_C BFu31i_BFu17i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu17i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17i_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_D");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_D");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_D");
    check_field_offset(lv, v3, 8, "BFu31i_BFu17i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_D, BFu31i_BFu17i_D)
//============================================================================


struct  BFu31i_BFu17i_F  {
  unsigned int v1:31;
  unsigned int v2:17;
  float v3;
};
//SIG(1 BFu31i_BFu17i_F) C1{ Fi:31 Fi:17 Fi}



static void Test_BFu31i_BFu17i_F()
{
  {
    init_simple_test("BFu31i_BFu17i_F");
    static STRUCT_IF_C BFu31i_BFu17i_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu17i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu17i_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_F");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_F");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_F");
    check_field_offset(lv, v3, 8, "BFu31i_BFu17i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_F, BFu31i_BFu17i_F)
//============================================================================


struct  BFu31i_BFu17i_I  {
  unsigned int v1:31;
  unsigned int v2:17;
  int v3;
};
//SIG(1 BFu31i_BFu17i_I) C1{ Fi:31 Fi:17 Fi}



static void Test_BFu31i_BFu17i_I()
{
  {
    init_simple_test("BFu31i_BFu17i_I");
    static STRUCT_IF_C BFu31i_BFu17i_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu17i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu17i_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_I");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_I");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_I");
    check_field_offset(lv, v3, 8, "BFu31i_BFu17i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_I, BFu31i_BFu17i_I)
//============================================================================


struct  BFu31i_BFu17i_Ip  {
  unsigned int v1:31;
  unsigned int v2:17;
  int *v3;
};
//SIG(1 BFu31i_BFu17i_Ip) C1{ Fi:31 Fi:17 Fp}



static void Test_BFu31i_BFu17i_Ip()
{
  {
    init_simple_test("BFu31i_BFu17i_Ip");
    static STRUCT_IF_C BFu31i_BFu17i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu17i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_Ip");
    check_field_offset(lv, v3, 8, "BFu31i_BFu17i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_Ip, BFu31i_BFu17i_Ip)
//============================================================================


struct  BFu31i_BFu17i_L  {
  unsigned int v1:31;
  unsigned int v2:17;
  __tsi64 v3;
};
//SIG(1 BFu31i_BFu17i_L) C1{ Fi:31 Fi:17 FL}



static void Test_BFu31i_BFu17i_L()
{
  {
    init_simple_test("BFu31i_BFu17i_L");
    static STRUCT_IF_C BFu31i_BFu17i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu17i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17i_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_L");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_L");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_L");
    check_field_offset(lv, v3, 8, "BFu31i_BFu17i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_L, BFu31i_BFu17i_L)
//============================================================================


struct  BFu31i_BFu17i_S  {
  unsigned int v1:31;
  unsigned int v2:17;
  short v3;
};
//SIG(1 BFu31i_BFu17i_S) C1{ Fi:31 Fi:17 Fs}



static void Test_BFu31i_BFu17i_S()
{
  {
    init_simple_test("BFu31i_BFu17i_S");
    static STRUCT_IF_C BFu31i_BFu17i_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu17i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu17i_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_S");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_S");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_S");
    check_field_offset(lv, v3, 8, "BFu31i_BFu17i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_S, BFu31i_BFu17i_S)
//============================================================================


struct  BFu31i_BFu17i_Uc  {
  unsigned int v1:31;
  unsigned int v2:17;
  unsigned char v3;
};
//SIG(1 BFu31i_BFu17i_Uc) C1{ Fi:31 Fi:17 Fc}



static void Test_BFu31i_BFu17i_Uc()
{
  {
    init_simple_test("BFu31i_BFu17i_Uc");
    static STRUCT_IF_C BFu31i_BFu17i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu17i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_Uc");
    check_field_offset(lv, v3, 7, "BFu31i_BFu17i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_Uc, BFu31i_BFu17i_Uc)
//============================================================================


struct  BFu31i_BFu17i_Ui  {
  unsigned int v1:31;
  unsigned int v2:17;
  unsigned int v3;
};
//SIG(1 BFu31i_BFu17i_Ui) C1{ Fi:31 Fi:17 Fi}



static void Test_BFu31i_BFu17i_Ui()
{
  {
    init_simple_test("BFu31i_BFu17i_Ui");
    static STRUCT_IF_C BFu31i_BFu17i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu17i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu17i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_Ui");
    check_field_offset(lv, v3, 8, "BFu31i_BFu17i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_Ui, BFu31i_BFu17i_Ui)
//============================================================================


struct  BFu31i_BFu17i_Ul  {
  unsigned int v1:31;
  unsigned int v2:17;
  __tsu64 v3;
};
//SIG(1 BFu31i_BFu17i_Ul) C1{ Fi:31 Fi:17 FL}



static void Test_BFu31i_BFu17i_Ul()
{
  {
    init_simple_test("BFu31i_BFu17i_Ul");
    static STRUCT_IF_C BFu31i_BFu17i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu17i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_Ul");
    check_field_offset(lv, v3, 8, "BFu31i_BFu17i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_Ul, BFu31i_BFu17i_Ul)
//============================================================================


struct  BFu31i_BFu17i_Us  {
  unsigned int v1:31;
  unsigned int v2:17;
  unsigned short v3;
};
//SIG(1 BFu31i_BFu17i_Us) C1{ Fi:31 Fi:17 Fs}



static void Test_BFu31i_BFu17i_Us()
{
  {
    init_simple_test("BFu31i_BFu17i_Us");
    static STRUCT_IF_C BFu31i_BFu17i_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu17i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu17i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_Us");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_Us");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_Us");
    check_field_offset(lv, v3, 8, "BFu31i_BFu17i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_Us, BFu31i_BFu17i_Us)
//============================================================================


struct  BFu31i_BFu17i_Vp  {
  unsigned int v1:31;
  unsigned int v2:17;
  void *v3;
};
//SIG(1 BFu31i_BFu17i_Vp) C1{ Fi:31 Fi:17 Fp}



static void Test_BFu31i_BFu17i_Vp()
{
  {
    init_simple_test("BFu31i_BFu17i_Vp");
    static STRUCT_IF_C BFu31i_BFu17i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu17i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_Vp");
    check_field_offset(lv, v3, 8, "BFu31i_BFu17i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17i_Vp, BFu31i_BFu17i_Vp)
//============================================================================


struct  BFu31i_BFu17ll  {
  unsigned int v1:31;
  __tsu64 v2:17;
};
//SIG(1 BFu31i_BFu17ll) C1{ Fi:31 FL:17}



static void Test_BFu31i_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll, BFu31i_BFu17ll)
//============================================================================


struct  BFu31i_BFu17ll_BFu15i  {
  unsigned int v1:31;
  __tsu64 v2:17;
  unsigned int v3:15;
};
//SIG(1 BFu31i_BFu17ll_BFu15i) C1{ Fi:31 FL:17 Fi:15}



static void Test_BFu31i_BFu17ll_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu17ll_BFu15i");
    static STRUCT_IF_C BFu31i_BFu17ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu17ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_BFu15i, BFu31i_BFu17ll_BFu15i)
//============================================================================


struct  BFu31i_BFu17ll_BFu15ll  {
  unsigned int v1:31;
  __tsu64 v2:17;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_BFu17ll_BFu15ll) C1{ Fi:31 FL:17 FL:15}



static void Test_BFu31i_BFu17ll_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu17ll_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu17ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu17ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_BFu15ll, BFu31i_BFu17ll_BFu15ll)
//============================================================================


struct  BFu31i_BFu17ll_BFu15s  {
  unsigned int v1:31;
  __tsu64 v2:17;
  unsigned short v3:15;
};
//SIG(1 BFu31i_BFu17ll_BFu15s) C1{ Fi:31 FL:17 Fs:15}



static void Test_BFu31i_BFu17ll_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu17ll_BFu15s");
    static STRUCT_IF_C BFu31i_BFu17ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu17ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_BFu15s, BFu31i_BFu17ll_BFu15s)
//============================================================================


struct  BFu31i_BFu17ll_BFu16i  {
  unsigned int v1:31;
  __tsu64 v2:17;
  unsigned int v3:16;
};
//SIG(1 BFu31i_BFu17ll_BFu16i) C1{ Fi:31 FL:17 Fi:16}



static void Test_BFu31i_BFu17ll_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu17ll_BFu16i");
    static STRUCT_IF_C BFu31i_BFu17ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu17ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_BFu16i, BFu31i_BFu17ll_BFu16i)
//============================================================================


struct  BFu31i_BFu17ll_BFu16ll  {
  unsigned int v1:31;
  __tsu64 v2:17;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_BFu17ll_BFu16ll) C1{ Fi:31 FL:17 FL:16}



static void Test_BFu31i_BFu17ll_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu17ll_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu17ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu17ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_BFu16ll, BFu31i_BFu17ll_BFu16ll)
//============================================================================


struct  BFu31i_BFu17ll_BFu16s  {
  unsigned int v1:31;
  __tsu64 v2:17;
  unsigned short v3:16;
};
//SIG(1 BFu31i_BFu17ll_BFu16s) C1{ Fi:31 FL:17 Fs:16}



static void Test_BFu31i_BFu17ll_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu17ll_BFu16s");
    static STRUCT_IF_C BFu31i_BFu17ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu17ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_BFu16s, BFu31i_BFu17ll_BFu16s)
//============================================================================


struct  BFu31i_BFu17ll_BFu17i  {
  unsigned int v1:31;
  __tsu64 v2:17;
  unsigned int v3:17;
};
//SIG(1 BFu31i_BFu17ll_BFu17i) C1{ Fi:31 FL:17 Fi:17}



static void Test_BFu31i_BFu17ll_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu17ll_BFu17i");
    static STRUCT_IF_C BFu31i_BFu17ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_BFu17i, BFu31i_BFu17ll_BFu17i)
//============================================================================


struct  BFu31i_BFu17ll_BFu17ll  {
  unsigned int v1:31;
  __tsu64 v2:17;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_BFu17ll_BFu17ll) C1{ Fi:31 FL:17 FL:17}



static void Test_BFu31i_BFu17ll_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu17ll_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu17ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, 1, "BFu31i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_BFu17ll, BFu31i_BFu17ll_BFu17ll)
//============================================================================


struct  BFu31i_BFu17ll_BFu1c  {
  unsigned int v1:31;
  __tsu64 v2:17;
  unsigned char v3:1;
};
//SIG(1 BFu31i_BFu17ll_BFu1c) C1{ Fi:31 FL:17 Fc:1}



static void Test_BFu31i_BFu17ll_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu17ll_BFu1c");
    static STRUCT_IF_C BFu31i_BFu17ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu1c");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31i_BFu17ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_BFu1c, BFu31i_BFu17ll_BFu1c)
//============================================================================


struct  BFu31i_BFu17ll_BFu1i  {
  unsigned int v1:31;
  __tsu64 v2:17;
  unsigned int v3:1;
};
//SIG(1 BFu31i_BFu17ll_BFu1i) C1{ Fi:31 FL:17 Fi:1}



static void Test_BFu31i_BFu17ll_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu17ll_BFu1i");
    static STRUCT_IF_C BFu31i_BFu17ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu1i");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31i_BFu17ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_BFu1i, BFu31i_BFu17ll_BFu1i)
//============================================================================


struct  BFu31i_BFu17ll_BFu1ll  {
  unsigned int v1:31;
  __tsu64 v2:17;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_BFu17ll_BFu1ll) C1{ Fi:31 FL:17 FL:1}



static void Test_BFu31i_BFu17ll_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu17ll_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu17ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31i_BFu17ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_BFu1ll, BFu31i_BFu17ll_BFu1ll)
//============================================================================


struct  BFu31i_BFu17ll_BFu1s  {
  unsigned int v1:31;
  __tsu64 v2:17;
  unsigned short v3:1;
};
//SIG(1 BFu31i_BFu17ll_BFu1s) C1{ Fi:31 FL:17 Fs:1}



static void Test_BFu31i_BFu17ll_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu17ll_BFu1s");
    static STRUCT_IF_C BFu31i_BFu17ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu1s");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31i_BFu17ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_BFu1s, BFu31i_BFu17ll_BFu1s)
//============================================================================


struct  BFu31i_BFu17ll_BFu31i  {
  unsigned int v1:31;
  __tsu64 v2:17;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFu17ll_BFu31i) C1{ Fi:31 FL:17 Fi:31}



static void Test_BFu31i_BFu17ll_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu17ll_BFu31i");
    static STRUCT_IF_C BFu31i_BFu17ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu17ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_BFu31i, BFu31i_BFu17ll_BFu31i)
//============================================================================


struct  BFu31i_BFu17ll_BFu31ll  {
  unsigned int v1:31;
  __tsu64 v2:17;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFu17ll_BFu31ll) C1{ Fi:31 FL:17 FL:31}



static void Test_BFu31i_BFu17ll_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu17ll_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu17ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu17ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, 1, "BFu31i_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_BFu31ll, BFu31i_BFu17ll_BFu31ll)
//============================================================================


struct  BFu31i_BFu17ll_BFu32i  {
  unsigned int v1:31;
  __tsu64 v2:17;
  unsigned int v3:32;
};
//SIG(1 BFu31i_BFu17ll_BFu32i) C1{ Fi:31 FL:17 Fi:32}



static void Test_BFu31i_BFu17ll_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu17ll_BFu32i");
    static STRUCT_IF_C BFu31i_BFu17ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu17ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu17ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_BFu32i, BFu31i_BFu17ll_BFu32i)
//============================================================================


struct  BFu31i_BFu17ll_BFu32ll  {
  unsigned int v1:31;
  __tsu64 v2:17;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_BFu17ll_BFu32ll) C1{ Fi:31 FL:17 FL:32}



static void Test_BFu31i_BFu17ll_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu17ll_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu17ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu17ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, 1, "BFu31i_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, hide_ull(1LL<<31), "BFu31i_BFu17ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_BFu32ll, BFu31i_BFu17ll_BFu32ll)
//============================================================================


struct  BFu31i_BFu17ll_BFu33  {
  unsigned int v1:31;
  __tsu64 v2:17;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_BFu17ll_BFu33) C1{ Fi:31 FL:17 FL:33}



static void Test_BFu31i_BFu17ll_BFu33()
{
  {
    init_simple_test("BFu31i_BFu17ll_BFu33");
    static STRUCT_IF_C BFu31i_BFu17ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu17ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, 1, "BFu31i_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, hide_ull(1LL<<32), "BFu31i_BFu17ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_BFu33, BFu31i_BFu17ll_BFu33)
//============================================================================


struct  BFu31i_BFu17ll_BFu7c  {
  unsigned int v1:31;
  __tsu64 v2:17;
  unsigned char v3:7;
};
//SIG(1 BFu31i_BFu17ll_BFu7c) C1{ Fi:31 FL:17 Fc:7}



static void Test_BFu31i_BFu17ll_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu17ll_BFu7c");
    static STRUCT_IF_C BFu31i_BFu17ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31i_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu17ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_BFu7c, BFu31i_BFu17ll_BFu7c)
//============================================================================


struct  BFu31i_BFu17ll_BFu7i  {
  unsigned int v1:31;
  __tsu64 v2:17;
  unsigned int v3:7;
};
//SIG(1 BFu31i_BFu17ll_BFu7i) C1{ Fi:31 FL:17 Fi:7}



static void Test_BFu31i_BFu17ll_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu17ll_BFu7i");
    static STRUCT_IF_C BFu31i_BFu17ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31i_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu17ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_BFu7i, BFu31i_BFu17ll_BFu7i)
//============================================================================


struct  BFu31i_BFu17ll_BFu7ll  {
  unsigned int v1:31;
  __tsu64 v2:17;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_BFu17ll_BFu7ll) C1{ Fi:31 FL:17 FL:7}



static void Test_BFu31i_BFu17ll_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu17ll_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu17ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31i_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu17ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_BFu7ll, BFu31i_BFu17ll_BFu7ll)
//============================================================================


struct  BFu31i_BFu17ll_BFu7s  {
  unsigned int v1:31;
  __tsu64 v2:17;
  unsigned short v3:7;
};
//SIG(1 BFu31i_BFu17ll_BFu7s) C1{ Fi:31 FL:17 Fs:7}



static void Test_BFu31i_BFu17ll_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu17ll_BFu7s");
    static STRUCT_IF_C BFu31i_BFu17ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31i_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu17ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_BFu7s, BFu31i_BFu17ll_BFu7s)
//============================================================================


struct  BFu31i_BFu17ll_BFu8c  {
  unsigned int v1:31;
  __tsu64 v2:17;
  unsigned char v3:8;
};
//SIG(1 BFu31i_BFu17ll_BFu8c) C1{ Fi:31 FL:17 Fc:8}



static void Test_BFu31i_BFu17ll_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu17ll_BFu8c");
    static STRUCT_IF_C BFu31i_BFu17ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu17ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_BFu8c, BFu31i_BFu17ll_BFu8c)
//============================================================================


struct  BFu31i_BFu17ll_BFu8i  {
  unsigned int v1:31;
  __tsu64 v2:17;
  unsigned int v3:8;
};
//SIG(1 BFu31i_BFu17ll_BFu8i) C1{ Fi:31 FL:17 Fi:8}



static void Test_BFu31i_BFu17ll_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu17ll_BFu8i");
    static STRUCT_IF_C BFu31i_BFu17ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu17ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_BFu8i, BFu31i_BFu17ll_BFu8i)
//============================================================================


struct  BFu31i_BFu17ll_BFu8ll  {
  unsigned int v1:31;
  __tsu64 v2:17;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_BFu17ll_BFu8ll) C1{ Fi:31 FL:17 FL:8}



static void Test_BFu31i_BFu17ll_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu17ll_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu17ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu17ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_BFu8ll, BFu31i_BFu17ll_BFu8ll)
//============================================================================


struct  BFu31i_BFu17ll_BFu8s  {
  unsigned int v1:31;
  __tsu64 v2:17;
  unsigned short v3:8;
};
//SIG(1 BFu31i_BFu17ll_BFu8s) C1{ Fi:31 FL:17 Fs:8}



static void Test_BFu31i_BFu17ll_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu17ll_BFu8s");
    static STRUCT_IF_C BFu31i_BFu17ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu17ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_BFu8s, BFu31i_BFu17ll_BFu8s)
//============================================================================


struct  BFu31i_BFu17ll_BFu9i  {
  unsigned int v1:31;
  __tsu64 v2:17;
  unsigned int v3:9;
};
//SIG(1 BFu31i_BFu17ll_BFu9i) C1{ Fi:31 FL:17 Fi:9}



static void Test_BFu31i_BFu17ll_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu17ll_BFu9i");
    static STRUCT_IF_C BFu31i_BFu17ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31i_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu17ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_BFu9i, BFu31i_BFu17ll_BFu9i)
//============================================================================


struct  BFu31i_BFu17ll_BFu9ll  {
  unsigned int v1:31;
  __tsu64 v2:17;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_BFu17ll_BFu9ll) C1{ Fi:31 FL:17 FL:9}



static void Test_BFu31i_BFu17ll_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu17ll_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu17ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31i_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu17ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_BFu9ll, BFu31i_BFu17ll_BFu9ll)
//============================================================================


struct  BFu31i_BFu17ll_BFu9s  {
  unsigned int v1:31;
  __tsu64 v2:17;
  unsigned short v3:9;
};
//SIG(1 BFu31i_BFu17ll_BFu9s) C1{ Fi:31 FL:17 Fs:9}



static void Test_BFu31i_BFu17ll_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu17ll_BFu9s");
    static STRUCT_IF_C BFu31i_BFu17ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31i_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu17ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_BFu9s, BFu31i_BFu17ll_BFu9s)
//============================================================================


struct  BFu31i_BFu17ll_C  {
  unsigned int v1:31;
  __tsu64 v2:17;
  char v3;
};
//SIG(1 BFu31i_BFu17ll_C) C1{ Fi:31 FL:17 Fc}



static void Test_BFu31i_BFu17ll_C()
{
  {
    init_simple_test("BFu31i_BFu17ll_C");
    static STRUCT_IF_C BFu31i_BFu17ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_C");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_C");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_C");
    check_field_offset(lv, v3, 6, "BFu31i_BFu17ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_C, BFu31i_BFu17ll_C)
//============================================================================


struct  BFu31i_BFu17ll_D  {
  unsigned int v1:31;
  __tsu64 v2:17;
  double v3;
};
//SIG(1 BFu31i_BFu17ll_D) C1{ Fi:31 FL:17 FL}



static void Test_BFu31i_BFu17ll_D()
{
  {
    init_simple_test("BFu31i_BFu17ll_D");
    static STRUCT_IF_C BFu31i_BFu17ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu17ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_D");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_D");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_D");
    check_field_offset(lv, v3, 8, "BFu31i_BFu17ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_D, BFu31i_BFu17ll_D)
//============================================================================


struct  BFu31i_BFu17ll_F  {
  unsigned int v1:31;
  __tsu64 v2:17;
  float v3;
};
//SIG(1 BFu31i_BFu17ll_F) C1{ Fi:31 FL:17 Fi}



static void Test_BFu31i_BFu17ll_F()
{
  {
    init_simple_test("BFu31i_BFu17ll_F");
    static STRUCT_IF_C BFu31i_BFu17ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu17ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_F");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_F");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_F");
    check_field_offset(lv, v3, 8, "BFu31i_BFu17ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_F, BFu31i_BFu17ll_F)
//============================================================================


struct  BFu31i_BFu17ll_I  {
  unsigned int v1:31;
  __tsu64 v2:17;
  int v3;
};
//SIG(1 BFu31i_BFu17ll_I) C1{ Fi:31 FL:17 Fi}



static void Test_BFu31i_BFu17ll_I()
{
  {
    init_simple_test("BFu31i_BFu17ll_I");
    static STRUCT_IF_C BFu31i_BFu17ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu17ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_I");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_I");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_I");
    check_field_offset(lv, v3, 8, "BFu31i_BFu17ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_I, BFu31i_BFu17ll_I)
//============================================================================


struct  BFu31i_BFu17ll_Ip  {
  unsigned int v1:31;
  __tsu64 v2:17;
  int *v3;
};
//SIG(1 BFu31i_BFu17ll_Ip) C1{ Fi:31 FL:17 Fp}



static void Test_BFu31i_BFu17ll_Ip()
{
  {
    init_simple_test("BFu31i_BFu17ll_Ip");
    static STRUCT_IF_C BFu31i_BFu17ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu17ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_Ip");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_Ip");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_Ip");
    check_field_offset(lv, v3, 8, "BFu31i_BFu17ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_Ip, BFu31i_BFu17ll_Ip)
//============================================================================


struct  BFu31i_BFu17ll_L  {
  unsigned int v1:31;
  __tsu64 v2:17;
  __tsi64 v3;
};
//SIG(1 BFu31i_BFu17ll_L) C1{ Fi:31 FL:17 FL}



static void Test_BFu31i_BFu17ll_L()
{
  {
    init_simple_test("BFu31i_BFu17ll_L");
    static STRUCT_IF_C BFu31i_BFu17ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu17ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_L");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_L");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_L");
    check_field_offset(lv, v3, 8, "BFu31i_BFu17ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_L, BFu31i_BFu17ll_L)
//============================================================================


struct  BFu31i_BFu17ll_S  {
  unsigned int v1:31;
  __tsu64 v2:17;
  short v3;
};
//SIG(1 BFu31i_BFu17ll_S) C1{ Fi:31 FL:17 Fs}



static void Test_BFu31i_BFu17ll_S()
{
  {
    init_simple_test("BFu31i_BFu17ll_S");
    static STRUCT_IF_C BFu31i_BFu17ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_S");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_S");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_S");
    check_field_offset(lv, v3, 6, "BFu31i_BFu17ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_S, BFu31i_BFu17ll_S)
//============================================================================


struct  BFu31i_BFu17ll_Uc  {
  unsigned int v1:31;
  __tsu64 v2:17;
  unsigned char v3;
};
//SIG(1 BFu31i_BFu17ll_Uc) C1{ Fi:31 FL:17 Fc}



static void Test_BFu31i_BFu17ll_Uc()
{
  {
    init_simple_test("BFu31i_BFu17ll_Uc");
    static STRUCT_IF_C BFu31i_BFu17ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_Uc");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_Uc");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_Uc");
    check_field_offset(lv, v3, 6, "BFu31i_BFu17ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_Uc, BFu31i_BFu17ll_Uc)
//============================================================================


struct  BFu31i_BFu17ll_Ui  {
  unsigned int v1:31;
  __tsu64 v2:17;
  unsigned int v3;
};
//SIG(1 BFu31i_BFu17ll_Ui) C1{ Fi:31 FL:17 Fi}



static void Test_BFu31i_BFu17ll_Ui()
{
  {
    init_simple_test("BFu31i_BFu17ll_Ui");
    static STRUCT_IF_C BFu31i_BFu17ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu17ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_Ui");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_Ui");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_Ui");
    check_field_offset(lv, v3, 8, "BFu31i_BFu17ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_Ui, BFu31i_BFu17ll_Ui)
//============================================================================


struct  BFu31i_BFu17ll_Ul  {
  unsigned int v1:31;
  __tsu64 v2:17;
  __tsu64 v3;
};
//SIG(1 BFu31i_BFu17ll_Ul) C1{ Fi:31 FL:17 FL}



static void Test_BFu31i_BFu17ll_Ul()
{
  {
    init_simple_test("BFu31i_BFu17ll_Ul");
    static STRUCT_IF_C BFu31i_BFu17ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu17ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_Ul");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_Ul");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_Ul");
    check_field_offset(lv, v3, 8, "BFu31i_BFu17ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_Ul, BFu31i_BFu17ll_Ul)
//============================================================================


struct  BFu31i_BFu17ll_Us  {
  unsigned int v1:31;
  __tsu64 v2:17;
  unsigned short v3;
};
//SIG(1 BFu31i_BFu17ll_Us) C1{ Fi:31 FL:17 Fs}



static void Test_BFu31i_BFu17ll_Us()
{
  {
    init_simple_test("BFu31i_BFu17ll_Us");
    static STRUCT_IF_C BFu31i_BFu17ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_Us");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_Us");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_Us");
    check_field_offset(lv, v3, 6, "BFu31i_BFu17ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_Us, BFu31i_BFu17ll_Us)
//============================================================================


struct  BFu31i_BFu17ll_Vp  {
  unsigned int v1:31;
  __tsu64 v2:17;
  void *v3;
};
//SIG(1 BFu31i_BFu17ll_Vp) C1{ Fi:31 FL:17 Fp}



static void Test_BFu31i_BFu17ll_Vp()
{
  {
    init_simple_test("BFu31i_BFu17ll_Vp");
    static STRUCT_IF_C BFu31i_BFu17ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu17ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_Vp");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_Vp");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_Vp");
    check_field_offset(lv, v3, 8, "BFu31i_BFu17ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu17ll_Vp, BFu31i_BFu17ll_Vp)
//============================================================================


struct  BFu31i_BFu1c  {
  unsigned int v1:31;
  unsigned char v2:1;
};
//SIG(1 BFu31i_BFu1c) C1{ Fi:31 Fc:1}



static void Test_BFu31i_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu1c");
    static STRUCT_IF_C BFu31i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu31i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c, BFu31i_BFu1c)
//============================================================================


struct  BFu31i_BFu1c_BFu15i  {
  unsigned int v1:31;
  unsigned char v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu31i_BFu1c_BFu15i) C1{ Fi:31 Fc:1 Fi:15}



static void Test_BFu31i_BFu1c_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu1c_BFu15i");
    static STRUCT_IF_C BFu31i_BFu1c_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu31i_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu1c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_BFu15i, BFu31i_BFu1c_BFu15i)
//============================================================================


struct  BFu31i_BFu1c_BFu15ll  {
  unsigned int v1:31;
  unsigned char v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_BFu1c_BFu15ll) C1{ Fi:31 Fc:1 FL:15}



static void Test_BFu31i_BFu1c_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu1c_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu1c_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu31i_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu1c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_BFu15ll, BFu31i_BFu1c_BFu15ll)
//============================================================================


struct  BFu31i_BFu1c_BFu15s  {
  unsigned int v1:31;
  unsigned char v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu31i_BFu1c_BFu15s) C1{ Fi:31 Fc:1 Fs:15}



static void Test_BFu31i_BFu1c_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu1c_BFu15s");
    static STRUCT_IF_C BFu31i_BFu1c_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu31i_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu1c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_BFu15s, BFu31i_BFu1c_BFu15s)
//============================================================================


struct  BFu31i_BFu1c_BFu16i  {
  unsigned int v1:31;
  unsigned char v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu31i_BFu1c_BFu16i) C1{ Fi:31 Fc:1 Fi:16}



static void Test_BFu31i_BFu1c_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu1c_BFu16i");
    static STRUCT_IF_C BFu31i_BFu1c_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu31i_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu1c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_BFu16i, BFu31i_BFu1c_BFu16i)
//============================================================================


struct  BFu31i_BFu1c_BFu16ll  {
  unsigned int v1:31;
  unsigned char v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_BFu1c_BFu16ll) C1{ Fi:31 Fc:1 FL:16}



static void Test_BFu31i_BFu1c_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu1c_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu1c_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu31i_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu1c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_BFu16ll, BFu31i_BFu1c_BFu16ll)
//============================================================================


struct  BFu31i_BFu1c_BFu16s  {
  unsigned int v1:31;
  unsigned char v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu31i_BFu1c_BFu16s) C1{ Fi:31 Fc:1 Fs:16}



static void Test_BFu31i_BFu1c_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu1c_BFu16s");
    static STRUCT_IF_C BFu31i_BFu1c_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu31i_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu1c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_BFu16s, BFu31i_BFu1c_BFu16s)
//============================================================================


struct  BFu31i_BFu1c_BFu17i  {
  unsigned int v1:31;
  unsigned char v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu31i_BFu1c_BFu17i) C1{ Fi:31 Fc:1 Fi:17}



static void Test_BFu31i_BFu1c_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu1c_BFu17i");
    static STRUCT_IF_C BFu31i_BFu1c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu31i_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu1c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_BFu17i, BFu31i_BFu1c_BFu17i)
//============================================================================


struct  BFu31i_BFu1c_BFu17ll  {
  unsigned int v1:31;
  unsigned char v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_BFu1c_BFu17ll) C1{ Fi:31 Fc:1 FL:17}



static void Test_BFu31i_BFu1c_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu1c_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu1c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu31i_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu1c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_BFu17ll, BFu31i_BFu1c_BFu17ll)
//============================================================================


struct  BFu31i_BFu1c_BFu1c  {
  unsigned int v1:31;
  unsigned char v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu31i_BFu1c_BFu1c) C1{ Fi:31 Fc:1 Fc:1}



static void Test_BFu31i_BFu1c_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu1c_BFu1c");
    static STRUCT_IF_C BFu31i_BFu1c_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31i_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_BFu1c, BFu31i_BFu1c_BFu1c)
//============================================================================


struct  BFu31i_BFu1c_BFu1i  {
  unsigned int v1:31;
  unsigned char v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu31i_BFu1c_BFu1i) C1{ Fi:31 Fc:1 Fi:1}



static void Test_BFu31i_BFu1c_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu1c_BFu1i");
    static STRUCT_IF_C BFu31i_BFu1c_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31i_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_BFu1i, BFu31i_BFu1c_BFu1i)
//============================================================================


struct  BFu31i_BFu1c_BFu1ll  {
  unsigned int v1:31;
  unsigned char v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_BFu1c_BFu1ll) C1{ Fi:31 Fc:1 FL:1}



static void Test_BFu31i_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu1c_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu1c_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31i_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_BFu1ll, BFu31i_BFu1c_BFu1ll)
//============================================================================


struct  BFu31i_BFu1c_BFu1s  {
  unsigned int v1:31;
  unsigned char v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu31i_BFu1c_BFu1s) C1{ Fi:31 Fc:1 Fs:1}



static void Test_BFu31i_BFu1c_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu1c_BFu1s");
    static STRUCT_IF_C BFu31i_BFu1c_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31i_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_BFu1s, BFu31i_BFu1c_BFu1s)
//============================================================================


struct  BFu31i_BFu1c_BFu31i  {
  unsigned int v1:31;
  unsigned char v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFu1c_BFu31i) C1{ Fi:31 Fc:1 Fi:31}



static void Test_BFu31i_BFu1c_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu1c_BFu31i");
    static STRUCT_IF_C BFu31i_BFu1c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu31i_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_BFu31i, BFu31i_BFu1c_BFu31i)
//============================================================================


struct  BFu31i_BFu1c_BFu31ll  {
  unsigned int v1:31;
  unsigned char v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFu1c_BFu31ll) C1{ Fi:31 Fc:1 FL:31}



static void Test_BFu31i_BFu1c_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu1c_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu1c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu31i_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_BFu31ll, BFu31i_BFu1c_BFu31ll)
//============================================================================


struct  BFu31i_BFu1c_BFu32i  {
  unsigned int v1:31;
  unsigned char v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu31i_BFu1c_BFu32i) C1{ Fi:31 Fc:1 Fi:32}



static void Test_BFu31i_BFu1c_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu1c_BFu32i");
    static STRUCT_IF_C BFu31i_BFu1c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu31i_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu1c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_BFu32i, BFu31i_BFu1c_BFu32i)
//============================================================================


struct  BFu31i_BFu1c_BFu32ll  {
  unsigned int v1:31;
  unsigned char v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_BFu1c_BFu32ll) C1{ Fi:31 Fc:1 FL:32}



static void Test_BFu31i_BFu1c_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu1c_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu1c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu31i_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu1c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_BFu32ll, BFu31i_BFu1c_BFu32ll)
//============================================================================


struct  BFu31i_BFu1c_BFu33  {
  unsigned int v1:31;
  unsigned char v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_BFu1c_BFu33) C1{ Fi:31 Fc:1 FL:33}



static void Test_BFu31i_BFu1c_BFu33()
{
  {
    init_simple_test("BFu31i_BFu1c_BFu33");
    static STRUCT_IF_C BFu31i_BFu1c_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu1c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu31i_BFu1c_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu31i_BFu1c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_BFu33, BFu31i_BFu1c_BFu33)
//============================================================================


struct  BFu31i_BFu1c_BFu7c  {
  unsigned int v1:31;
  unsigned char v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu31i_BFu1c_BFu7c) C1{ Fi:31 Fc:1 Fc:7}



static void Test_BFu31i_BFu1c_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu1c_BFu7c");
    static STRUCT_IF_C BFu31i_BFu1c_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31i_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu1c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_BFu7c, BFu31i_BFu1c_BFu7c)
//============================================================================


struct  BFu31i_BFu1c_BFu7i  {
  unsigned int v1:31;
  unsigned char v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu31i_BFu1c_BFu7i) C1{ Fi:31 Fc:1 Fi:7}



static void Test_BFu31i_BFu1c_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu1c_BFu7i");
    static STRUCT_IF_C BFu31i_BFu1c_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31i_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu1c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_BFu7i, BFu31i_BFu1c_BFu7i)
//============================================================================


struct  BFu31i_BFu1c_BFu7ll  {
  unsigned int v1:31;
  unsigned char v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_BFu1c_BFu7ll) C1{ Fi:31 Fc:1 FL:7}



static void Test_BFu31i_BFu1c_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu1c_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu1c_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31i_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu1c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_BFu7ll, BFu31i_BFu1c_BFu7ll)
//============================================================================


struct  BFu31i_BFu1c_BFu7s  {
  unsigned int v1:31;
  unsigned char v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu31i_BFu1c_BFu7s) C1{ Fi:31 Fc:1 Fs:7}



static void Test_BFu31i_BFu1c_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu1c_BFu7s");
    static STRUCT_IF_C BFu31i_BFu1c_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31i_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu1c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_BFu7s, BFu31i_BFu1c_BFu7s)
//============================================================================


struct  BFu31i_BFu1c_BFu8c  {
  unsigned int v1:31;
  unsigned char v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu31i_BFu1c_BFu8c) C1{ Fi:31 Fc:1 Fc:8}



static void Test_BFu31i_BFu1c_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu1c_BFu8c");
    static STRUCT_IF_C BFu31i_BFu1c_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31i_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu1c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_BFu8c, BFu31i_BFu1c_BFu8c)
//============================================================================


struct  BFu31i_BFu1c_BFu8i  {
  unsigned int v1:31;
  unsigned char v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu31i_BFu1c_BFu8i) C1{ Fi:31 Fc:1 Fi:8}



static void Test_BFu31i_BFu1c_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu1c_BFu8i");
    static STRUCT_IF_C BFu31i_BFu1c_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31i_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu1c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_BFu8i, BFu31i_BFu1c_BFu8i)
//============================================================================


struct  BFu31i_BFu1c_BFu8ll  {
  unsigned int v1:31;
  unsigned char v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_BFu1c_BFu8ll) C1{ Fi:31 Fc:1 FL:8}



static void Test_BFu31i_BFu1c_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu1c_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu1c_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31i_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu1c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_BFu8ll, BFu31i_BFu1c_BFu8ll)
//============================================================================


struct  BFu31i_BFu1c_BFu8s  {
  unsigned int v1:31;
  unsigned char v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu31i_BFu1c_BFu8s) C1{ Fi:31 Fc:1 Fs:8}



static void Test_BFu31i_BFu1c_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu1c_BFu8s");
    static STRUCT_IF_C BFu31i_BFu1c_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31i_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu1c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_BFu8s, BFu31i_BFu1c_BFu8s)
//============================================================================


struct  BFu31i_BFu1c_BFu9i  {
  unsigned int v1:31;
  unsigned char v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu31i_BFu1c_BFu9i) C1{ Fi:31 Fc:1 Fi:9}



static void Test_BFu31i_BFu1c_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu1c_BFu9i");
    static STRUCT_IF_C BFu31i_BFu1c_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu31i_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu1c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_BFu9i, BFu31i_BFu1c_BFu9i)
//============================================================================


struct  BFu31i_BFu1c_BFu9ll  {
  unsigned int v1:31;
  unsigned char v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_BFu1c_BFu9ll) C1{ Fi:31 Fc:1 FL:9}



static void Test_BFu31i_BFu1c_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu1c_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu1c_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu31i_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu1c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_BFu9ll, BFu31i_BFu1c_BFu9ll)
//============================================================================


struct  BFu31i_BFu1c_BFu9s  {
  unsigned int v1:31;
  unsigned char v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu31i_BFu1c_BFu9s) C1{ Fi:31 Fc:1 Fs:9}



static void Test_BFu31i_BFu1c_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu1c_BFu9s");
    static STRUCT_IF_C BFu31i_BFu1c_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu31i_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu1c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_BFu9s, BFu31i_BFu1c_BFu9s)
//============================================================================


struct  BFu31i_BFu1c_C  {
  unsigned int v1:31;
  unsigned char v2:1;
  char v3;
};
//SIG(1 BFu31i_BFu1c_C) C1{ Fi:31 Fc:1 Fc}



static void Test_BFu31i_BFu1c_C()
{
  {
    init_simple_test("BFu31i_BFu1c_C");
    static STRUCT_IF_C BFu31i_BFu1c_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1c_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_C");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_C");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_C, BFu31i_BFu1c_C)
//============================================================================


struct  BFu31i_BFu1c_D  {
  unsigned int v1:31;
  unsigned char v2:1;
  double v3;
};
//SIG(1 BFu31i_BFu1c_D) C1{ Fi:31 Fc:1 FL}



static void Test_BFu31i_BFu1c_D()
{
  {
    init_simple_test("BFu31i_BFu1c_D");
    static STRUCT_IF_C BFu31i_BFu1c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu1c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1c_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_D");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31i_BFu1c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_D, BFu31i_BFu1c_D)
//============================================================================


struct  BFu31i_BFu1c_F  {
  unsigned int v1:31;
  unsigned char v2:1;
  float v3;
};
//SIG(1 BFu31i_BFu1c_F) C1{ Fi:31 Fc:1 Fi}



static void Test_BFu31i_BFu1c_F()
{
  {
    init_simple_test("BFu31i_BFu1c_F");
    static STRUCT_IF_C BFu31i_BFu1c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1c_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_F");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_F");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_F, BFu31i_BFu1c_F)
//============================================================================


struct  BFu31i_BFu1c_I  {
  unsigned int v1:31;
  unsigned char v2:1;
  int v3;
};
//SIG(1 BFu31i_BFu1c_I) C1{ Fi:31 Fc:1 Fi}



static void Test_BFu31i_BFu1c_I()
{
  {
    init_simple_test("BFu31i_BFu1c_I");
    static STRUCT_IF_C BFu31i_BFu1c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1c_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_I");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_I");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_I, BFu31i_BFu1c_I)
//============================================================================


struct  BFu31i_BFu1c_Ip  {
  unsigned int v1:31;
  unsigned char v2:1;
  int *v3;
};
//SIG(1 BFu31i_BFu1c_Ip) C1{ Fi:31 Fc:1 Fp}



static void Test_BFu31i_BFu1c_Ip()
{
  {
    init_simple_test("BFu31i_BFu1c_Ip");
    static STRUCT_IF_C BFu31i_BFu1c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu31i_BFu1c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_Ip");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31i_BFu1c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_Ip, BFu31i_BFu1c_Ip)
//============================================================================


struct  BFu31i_BFu1c_L  {
  unsigned int v1:31;
  unsigned char v2:1;
  __tsi64 v3;
};
//SIG(1 BFu31i_BFu1c_L) C1{ Fi:31 Fc:1 FL}



static void Test_BFu31i_BFu1c_L()
{
  {
    init_simple_test("BFu31i_BFu1c_L");
    static STRUCT_IF_C BFu31i_BFu1c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu1c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1c_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_L");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31i_BFu1c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_L, BFu31i_BFu1c_L)
//============================================================================


struct  BFu31i_BFu1c_S  {
  unsigned int v1:31;
  unsigned char v2:1;
  short v3;
};
//SIG(1 BFu31i_BFu1c_S) C1{ Fi:31 Fc:1 Fs}



static void Test_BFu31i_BFu1c_S()
{
  {
    init_simple_test("BFu31i_BFu1c_S");
    static STRUCT_IF_C BFu31i_BFu1c_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1c_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_S");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_S");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_S, BFu31i_BFu1c_S)
//============================================================================


struct  BFu31i_BFu1c_Uc  {
  unsigned int v1:31;
  unsigned char v2:1;
  unsigned char v3;
};
//SIG(1 BFu31i_BFu1c_Uc) C1{ Fi:31 Fc:1 Fc}



static void Test_BFu31i_BFu1c_Uc()
{
  {
    init_simple_test("BFu31i_BFu1c_Uc");
    static STRUCT_IF_C BFu31i_BFu1c_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_Uc");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_Uc");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_Uc, BFu31i_BFu1c_Uc)
//============================================================================


struct  BFu31i_BFu1c_Ui  {
  unsigned int v1:31;
  unsigned char v2:1;
  unsigned int v3;
};
//SIG(1 BFu31i_BFu1c_Ui) C1{ Fi:31 Fc:1 Fi}



static void Test_BFu31i_BFu1c_Ui()
{
  {
    init_simple_test("BFu31i_BFu1c_Ui");
    static STRUCT_IF_C BFu31i_BFu1c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_Ui");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_Ui");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_Ui, BFu31i_BFu1c_Ui)
//============================================================================


struct  BFu31i_BFu1c_Ul  {
  unsigned int v1:31;
  unsigned char v2:1;
  __tsu64 v3;
};
//SIG(1 BFu31i_BFu1c_Ul) C1{ Fi:31 Fc:1 FL}



static void Test_BFu31i_BFu1c_Ul()
{
  {
    init_simple_test("BFu31i_BFu1c_Ul");
    static STRUCT_IF_C BFu31i_BFu1c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu1c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_Ul");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31i_BFu1c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_Ul, BFu31i_BFu1c_Ul)
//============================================================================


struct  BFu31i_BFu1c_Us  {
  unsigned int v1:31;
  unsigned char v2:1;
  unsigned short v3;
};
//SIG(1 BFu31i_BFu1c_Us) C1{ Fi:31 Fc:1 Fs}



static void Test_BFu31i_BFu1c_Us()
{
  {
    init_simple_test("BFu31i_BFu1c_Us");
    static STRUCT_IF_C BFu31i_BFu1c_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_Us");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_Us");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_Us, BFu31i_BFu1c_Us)
//============================================================================


struct  BFu31i_BFu1c_Vp  {
  unsigned int v1:31;
  unsigned char v2:1;
  void *v3;
};
//SIG(1 BFu31i_BFu1c_Vp) C1{ Fi:31 Fc:1 Fp}



static void Test_BFu31i_BFu1c_Vp()
{
  {
    init_simple_test("BFu31i_BFu1c_Vp");
    static STRUCT_IF_C BFu31i_BFu1c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu31i_BFu1c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_Vp");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31i_BFu1c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1c_Vp, BFu31i_BFu1c_Vp)
//============================================================================


struct  BFu31i_BFu1i  {
  unsigned int v1:31;
  unsigned int v2:1;
};
//SIG(1 BFu31i_BFu1i) C1{ Fi:31 Fi:1}



static void Test_BFu31i_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu1i");
    static STRUCT_IF_C BFu31i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu31i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i, BFu31i_BFu1i)
//============================================================================


struct  BFu31i_BFu1i_BFu15i  {
  unsigned int v1:31;
  unsigned int v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu31i_BFu1i_BFu15i) C1{ Fi:31 Fi:1 Fi:15}



static void Test_BFu31i_BFu1i_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu1i_BFu15i");
    static STRUCT_IF_C BFu31i_BFu1i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu31i_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu1i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_BFu15i, BFu31i_BFu1i_BFu15i)
//============================================================================


struct  BFu31i_BFu1i_BFu15ll  {
  unsigned int v1:31;
  unsigned int v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_BFu1i_BFu15ll) C1{ Fi:31 Fi:1 FL:15}



static void Test_BFu31i_BFu1i_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu1i_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu1i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu31i_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu1i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_BFu15ll, BFu31i_BFu1i_BFu15ll)
//============================================================================


struct  BFu31i_BFu1i_BFu15s  {
  unsigned int v1:31;
  unsigned int v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu31i_BFu1i_BFu15s) C1{ Fi:31 Fi:1 Fs:15}



static void Test_BFu31i_BFu1i_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu1i_BFu15s");
    static STRUCT_IF_C BFu31i_BFu1i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu31i_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu1i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_BFu15s, BFu31i_BFu1i_BFu15s)
//============================================================================


struct  BFu31i_BFu1i_BFu16i  {
  unsigned int v1:31;
  unsigned int v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu31i_BFu1i_BFu16i) C1{ Fi:31 Fi:1 Fi:16}



static void Test_BFu31i_BFu1i_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu1i_BFu16i");
    static STRUCT_IF_C BFu31i_BFu1i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu31i_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu1i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_BFu16i, BFu31i_BFu1i_BFu16i)
//============================================================================


struct  BFu31i_BFu1i_BFu16ll  {
  unsigned int v1:31;
  unsigned int v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_BFu1i_BFu16ll) C1{ Fi:31 Fi:1 FL:16}



static void Test_BFu31i_BFu1i_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu1i_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu1i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu31i_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu1i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_BFu16ll, BFu31i_BFu1i_BFu16ll)
//============================================================================


struct  BFu31i_BFu1i_BFu16s  {
  unsigned int v1:31;
  unsigned int v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu31i_BFu1i_BFu16s) C1{ Fi:31 Fi:1 Fs:16}



static void Test_BFu31i_BFu1i_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu1i_BFu16s");
    static STRUCT_IF_C BFu31i_BFu1i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu31i_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu1i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_BFu16s, BFu31i_BFu1i_BFu16s)
//============================================================================


struct  BFu31i_BFu1i_BFu17i  {
  unsigned int v1:31;
  unsigned int v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu31i_BFu1i_BFu17i) C1{ Fi:31 Fi:1 Fi:17}



static void Test_BFu31i_BFu1i_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu1i_BFu17i");
    static STRUCT_IF_C BFu31i_BFu1i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu31i_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu1i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_BFu17i, BFu31i_BFu1i_BFu17i)
//============================================================================


struct  BFu31i_BFu1i_BFu17ll  {
  unsigned int v1:31;
  unsigned int v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_BFu1i_BFu17ll) C1{ Fi:31 Fi:1 FL:17}



static void Test_BFu31i_BFu1i_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu1i_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu1i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu31i_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu1i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_BFu17ll, BFu31i_BFu1i_BFu17ll)
//============================================================================


struct  BFu31i_BFu1i_BFu1c  {
  unsigned int v1:31;
  unsigned int v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu31i_BFu1i_BFu1c) C1{ Fi:31 Fi:1 Fc:1}



static void Test_BFu31i_BFu1i_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu1i_BFu1c");
    static STRUCT_IF_C BFu31i_BFu1i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31i_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_BFu1c, BFu31i_BFu1i_BFu1c)
//============================================================================


struct  BFu31i_BFu1i_BFu1i  {
  unsigned int v1:31;
  unsigned int v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu31i_BFu1i_BFu1i) C1{ Fi:31 Fi:1 Fi:1}



static void Test_BFu31i_BFu1i_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu1i_BFu1i");
    static STRUCT_IF_C BFu31i_BFu1i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31i_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_BFu1i, BFu31i_BFu1i_BFu1i)
//============================================================================


struct  BFu31i_BFu1i_BFu1ll  {
  unsigned int v1:31;
  unsigned int v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_BFu1i_BFu1ll) C1{ Fi:31 Fi:1 FL:1}



static void Test_BFu31i_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu1i_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu1i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31i_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_BFu1ll, BFu31i_BFu1i_BFu1ll)
//============================================================================


struct  BFu31i_BFu1i_BFu1s  {
  unsigned int v1:31;
  unsigned int v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu31i_BFu1i_BFu1s) C1{ Fi:31 Fi:1 Fs:1}



static void Test_BFu31i_BFu1i_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu1i_BFu1s");
    static STRUCT_IF_C BFu31i_BFu1i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31i_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_BFu1s, BFu31i_BFu1i_BFu1s)
//============================================================================


struct  BFu31i_BFu1i_BFu31i  {
  unsigned int v1:31;
  unsigned int v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFu1i_BFu31i) C1{ Fi:31 Fi:1 Fi:31}



static void Test_BFu31i_BFu1i_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu1i_BFu31i");
    static STRUCT_IF_C BFu31i_BFu1i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu31i_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_BFu31i, BFu31i_BFu1i_BFu31i)
//============================================================================


struct  BFu31i_BFu1i_BFu31ll  {
  unsigned int v1:31;
  unsigned int v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFu1i_BFu31ll) C1{ Fi:31 Fi:1 FL:31}



static void Test_BFu31i_BFu1i_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu1i_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu1i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu31i_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_BFu31ll, BFu31i_BFu1i_BFu31ll)
//============================================================================


struct  BFu31i_BFu1i_BFu32i  {
  unsigned int v1:31;
  unsigned int v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu31i_BFu1i_BFu32i) C1{ Fi:31 Fi:1 Fi:32}



static void Test_BFu31i_BFu1i_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu1i_BFu32i");
    static STRUCT_IF_C BFu31i_BFu1i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu31i_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu1i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_BFu32i, BFu31i_BFu1i_BFu32i)
//============================================================================


struct  BFu31i_BFu1i_BFu32ll  {
  unsigned int v1:31;
  unsigned int v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_BFu1i_BFu32ll) C1{ Fi:31 Fi:1 FL:32}



static void Test_BFu31i_BFu1i_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu1i_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu1i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu31i_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu1i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_BFu32ll, BFu31i_BFu1i_BFu32ll)
//============================================================================


struct  BFu31i_BFu1i_BFu33  {
  unsigned int v1:31;
  unsigned int v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_BFu1i_BFu33) C1{ Fi:31 Fi:1 FL:33}



static void Test_BFu31i_BFu1i_BFu33()
{
  {
    init_simple_test("BFu31i_BFu1i_BFu33");
    static STRUCT_IF_C BFu31i_BFu1i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu1i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu31i_BFu1i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu31i_BFu1i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_BFu33, BFu31i_BFu1i_BFu33)
//============================================================================


struct  BFu31i_BFu1i_BFu7c  {
  unsigned int v1:31;
  unsigned int v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu31i_BFu1i_BFu7c) C1{ Fi:31 Fi:1 Fc:7}



static void Test_BFu31i_BFu1i_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu1i_BFu7c");
    static STRUCT_IF_C BFu31i_BFu1i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31i_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu1i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_BFu7c, BFu31i_BFu1i_BFu7c)
//============================================================================


struct  BFu31i_BFu1i_BFu7i  {
  unsigned int v1:31;
  unsigned int v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu31i_BFu1i_BFu7i) C1{ Fi:31 Fi:1 Fi:7}



static void Test_BFu31i_BFu1i_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu1i_BFu7i");
    static STRUCT_IF_C BFu31i_BFu1i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31i_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu1i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_BFu7i, BFu31i_BFu1i_BFu7i)
//============================================================================


struct  BFu31i_BFu1i_BFu7ll  {
  unsigned int v1:31;
  unsigned int v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_BFu1i_BFu7ll) C1{ Fi:31 Fi:1 FL:7}



static void Test_BFu31i_BFu1i_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu1i_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu1i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31i_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu1i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_BFu7ll, BFu31i_BFu1i_BFu7ll)
//============================================================================


struct  BFu31i_BFu1i_BFu7s  {
  unsigned int v1:31;
  unsigned int v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu31i_BFu1i_BFu7s) C1{ Fi:31 Fi:1 Fs:7}



static void Test_BFu31i_BFu1i_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu1i_BFu7s");
    static STRUCT_IF_C BFu31i_BFu1i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31i_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu1i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_BFu7s, BFu31i_BFu1i_BFu7s)
//============================================================================


struct  BFu31i_BFu1i_BFu8c  {
  unsigned int v1:31;
  unsigned int v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu31i_BFu1i_BFu8c) C1{ Fi:31 Fi:1 Fc:8}



static void Test_BFu31i_BFu1i_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu1i_BFu8c");
    static STRUCT_IF_C BFu31i_BFu1i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31i_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu1i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_BFu8c, BFu31i_BFu1i_BFu8c)
//============================================================================


struct  BFu31i_BFu1i_BFu8i  {
  unsigned int v1:31;
  unsigned int v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu31i_BFu1i_BFu8i) C1{ Fi:31 Fi:1 Fi:8}



static void Test_BFu31i_BFu1i_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu1i_BFu8i");
    static STRUCT_IF_C BFu31i_BFu1i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31i_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu1i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_BFu8i, BFu31i_BFu1i_BFu8i)
//============================================================================


struct  BFu31i_BFu1i_BFu8ll  {
  unsigned int v1:31;
  unsigned int v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_BFu1i_BFu8ll) C1{ Fi:31 Fi:1 FL:8}



static void Test_BFu31i_BFu1i_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu1i_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu1i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31i_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu1i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_BFu8ll, BFu31i_BFu1i_BFu8ll)
//============================================================================


struct  BFu31i_BFu1i_BFu8s  {
  unsigned int v1:31;
  unsigned int v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu31i_BFu1i_BFu8s) C1{ Fi:31 Fi:1 Fs:8}



static void Test_BFu31i_BFu1i_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu1i_BFu8s");
    static STRUCT_IF_C BFu31i_BFu1i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31i_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu1i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_BFu8s, BFu31i_BFu1i_BFu8s)
//============================================================================


struct  BFu31i_BFu1i_BFu9i  {
  unsigned int v1:31;
  unsigned int v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu31i_BFu1i_BFu9i) C1{ Fi:31 Fi:1 Fi:9}



static void Test_BFu31i_BFu1i_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu1i_BFu9i");
    static STRUCT_IF_C BFu31i_BFu1i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu31i_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu1i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_BFu9i, BFu31i_BFu1i_BFu9i)
//============================================================================


struct  BFu31i_BFu1i_BFu9ll  {
  unsigned int v1:31;
  unsigned int v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_BFu1i_BFu9ll) C1{ Fi:31 Fi:1 FL:9}



static void Test_BFu31i_BFu1i_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu1i_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu1i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu31i_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu1i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_BFu9ll, BFu31i_BFu1i_BFu9ll)
//============================================================================


struct  BFu31i_BFu1i_BFu9s  {
  unsigned int v1:31;
  unsigned int v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu31i_BFu1i_BFu9s) C1{ Fi:31 Fi:1 Fs:9}



static void Test_BFu31i_BFu1i_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu1i_BFu9s");
    static STRUCT_IF_C BFu31i_BFu1i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu31i_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu1i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_BFu9s, BFu31i_BFu1i_BFu9s)
//============================================================================


struct  BFu31i_BFu1i_C  {
  unsigned int v1:31;
  unsigned int v2:1;
  char v3;
};
//SIG(1 BFu31i_BFu1i_C) C1{ Fi:31 Fi:1 Fc}



static void Test_BFu31i_BFu1i_C()
{
  {
    init_simple_test("BFu31i_BFu1i_C");
    static STRUCT_IF_C BFu31i_BFu1i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1i_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_C");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_C");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_C, BFu31i_BFu1i_C)
//============================================================================


struct  BFu31i_BFu1i_D  {
  unsigned int v1:31;
  unsigned int v2:1;
  double v3;
};
//SIG(1 BFu31i_BFu1i_D) C1{ Fi:31 Fi:1 FL}



static void Test_BFu31i_BFu1i_D()
{
  {
    init_simple_test("BFu31i_BFu1i_D");
    static STRUCT_IF_C BFu31i_BFu1i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu1i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1i_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_D");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31i_BFu1i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_D, BFu31i_BFu1i_D)
//============================================================================


struct  BFu31i_BFu1i_F  {
  unsigned int v1:31;
  unsigned int v2:1;
  float v3;
};
//SIG(1 BFu31i_BFu1i_F) C1{ Fi:31 Fi:1 Fi}



static void Test_BFu31i_BFu1i_F()
{
  {
    init_simple_test("BFu31i_BFu1i_F");
    static STRUCT_IF_C BFu31i_BFu1i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1i_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_F");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_F");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_F, BFu31i_BFu1i_F)
//============================================================================


struct  BFu31i_BFu1i_I  {
  unsigned int v1:31;
  unsigned int v2:1;
  int v3;
};
//SIG(1 BFu31i_BFu1i_I) C1{ Fi:31 Fi:1 Fi}



static void Test_BFu31i_BFu1i_I()
{
  {
    init_simple_test("BFu31i_BFu1i_I");
    static STRUCT_IF_C BFu31i_BFu1i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1i_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_I");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_I");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_I, BFu31i_BFu1i_I)
//============================================================================


struct  BFu31i_BFu1i_Ip  {
  unsigned int v1:31;
  unsigned int v2:1;
  int *v3;
};
//SIG(1 BFu31i_BFu1i_Ip) C1{ Fi:31 Fi:1 Fp}



static void Test_BFu31i_BFu1i_Ip()
{
  {
    init_simple_test("BFu31i_BFu1i_Ip");
    static STRUCT_IF_C BFu31i_BFu1i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu31i_BFu1i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_Ip");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31i_BFu1i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_Ip, BFu31i_BFu1i_Ip)
//============================================================================


struct  BFu31i_BFu1i_L  {
  unsigned int v1:31;
  unsigned int v2:1;
  __tsi64 v3;
};
//SIG(1 BFu31i_BFu1i_L) C1{ Fi:31 Fi:1 FL}



static void Test_BFu31i_BFu1i_L()
{
  {
    init_simple_test("BFu31i_BFu1i_L");
    static STRUCT_IF_C BFu31i_BFu1i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu1i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1i_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_L");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31i_BFu1i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_L, BFu31i_BFu1i_L)
//============================================================================


struct  BFu31i_BFu1i_S  {
  unsigned int v1:31;
  unsigned int v2:1;
  short v3;
};
//SIG(1 BFu31i_BFu1i_S) C1{ Fi:31 Fi:1 Fs}



static void Test_BFu31i_BFu1i_S()
{
  {
    init_simple_test("BFu31i_BFu1i_S");
    static STRUCT_IF_C BFu31i_BFu1i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1i_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_S");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_S");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_S, BFu31i_BFu1i_S)
//============================================================================


struct  BFu31i_BFu1i_Uc  {
  unsigned int v1:31;
  unsigned int v2:1;
  unsigned char v3;
};
//SIG(1 BFu31i_BFu1i_Uc) C1{ Fi:31 Fi:1 Fc}



static void Test_BFu31i_BFu1i_Uc()
{
  {
    init_simple_test("BFu31i_BFu1i_Uc");
    static STRUCT_IF_C BFu31i_BFu1i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_Uc");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_Uc");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_Uc, BFu31i_BFu1i_Uc)
//============================================================================


struct  BFu31i_BFu1i_Ui  {
  unsigned int v1:31;
  unsigned int v2:1;
  unsigned int v3;
};
//SIG(1 BFu31i_BFu1i_Ui) C1{ Fi:31 Fi:1 Fi}



static void Test_BFu31i_BFu1i_Ui()
{
  {
    init_simple_test("BFu31i_BFu1i_Ui");
    static STRUCT_IF_C BFu31i_BFu1i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_Ui");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_Ui");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_Ui, BFu31i_BFu1i_Ui)
//============================================================================


struct  BFu31i_BFu1i_Ul  {
  unsigned int v1:31;
  unsigned int v2:1;
  __tsu64 v3;
};
//SIG(1 BFu31i_BFu1i_Ul) C1{ Fi:31 Fi:1 FL}



static void Test_BFu31i_BFu1i_Ul()
{
  {
    init_simple_test("BFu31i_BFu1i_Ul");
    static STRUCT_IF_C BFu31i_BFu1i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu1i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_Ul");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31i_BFu1i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_Ul, BFu31i_BFu1i_Ul)
//============================================================================


struct  BFu31i_BFu1i_Us  {
  unsigned int v1:31;
  unsigned int v2:1;
  unsigned short v3;
};
//SIG(1 BFu31i_BFu1i_Us) C1{ Fi:31 Fi:1 Fs}



static void Test_BFu31i_BFu1i_Us()
{
  {
    init_simple_test("BFu31i_BFu1i_Us");
    static STRUCT_IF_C BFu31i_BFu1i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_Us");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_Us");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_Us, BFu31i_BFu1i_Us)
//============================================================================


struct  BFu31i_BFu1i_Vp  {
  unsigned int v1:31;
  unsigned int v2:1;
  void *v3;
};
//SIG(1 BFu31i_BFu1i_Vp) C1{ Fi:31 Fi:1 Fp}



static void Test_BFu31i_BFu1i_Vp()
{
  {
    init_simple_test("BFu31i_BFu1i_Vp");
    static STRUCT_IF_C BFu31i_BFu1i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu31i_BFu1i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_Vp");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31i_BFu1i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1i_Vp, BFu31i_BFu1i_Vp)
//============================================================================


struct  BFu31i_BFu1ll  {
  unsigned int v1:31;
  __tsu64 v2:1;
};
//SIG(1 BFu31i_BFu1ll) C1{ Fi:31 FL:1}



static void Test_BFu31i_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu31i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll, BFu31i_BFu1ll)
//============================================================================


struct  BFu31i_BFu1ll_BFu15i  {
  unsigned int v1:31;
  __tsu64 v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu31i_BFu1ll_BFu15i) C1{ Fi:31 FL:1 Fi:15}



static void Test_BFu31i_BFu1ll_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu1ll_BFu15i");
    static STRUCT_IF_C BFu31i_BFu1ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu31i_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu1ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_BFu15i, BFu31i_BFu1ll_BFu15i)
//============================================================================


struct  BFu31i_BFu1ll_BFu15ll  {
  unsigned int v1:31;
  __tsu64 v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_BFu1ll_BFu15ll) C1{ Fi:31 FL:1 FL:15}



static void Test_BFu31i_BFu1ll_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu1ll_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu1ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu31i_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu1ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_BFu15ll, BFu31i_BFu1ll_BFu15ll)
//============================================================================


struct  BFu31i_BFu1ll_BFu15s  {
  unsigned int v1:31;
  __tsu64 v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu31i_BFu1ll_BFu15s) C1{ Fi:31 FL:1 Fs:15}



static void Test_BFu31i_BFu1ll_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu1ll_BFu15s");
    static STRUCT_IF_C BFu31i_BFu1ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu31i_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu1ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_BFu15s, BFu31i_BFu1ll_BFu15s)
//============================================================================


struct  BFu31i_BFu1ll_BFu16i  {
  unsigned int v1:31;
  __tsu64 v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu31i_BFu1ll_BFu16i) C1{ Fi:31 FL:1 Fi:16}



static void Test_BFu31i_BFu1ll_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu1ll_BFu16i");
    static STRUCT_IF_C BFu31i_BFu1ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu31i_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu1ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_BFu16i, BFu31i_BFu1ll_BFu16i)
//============================================================================


struct  BFu31i_BFu1ll_BFu16ll  {
  unsigned int v1:31;
  __tsu64 v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_BFu1ll_BFu16ll) C1{ Fi:31 FL:1 FL:16}



static void Test_BFu31i_BFu1ll_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu1ll_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu1ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu31i_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu1ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_BFu16ll, BFu31i_BFu1ll_BFu16ll)
//============================================================================


struct  BFu31i_BFu1ll_BFu16s  {
  unsigned int v1:31;
  __tsu64 v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu31i_BFu1ll_BFu16s) C1{ Fi:31 FL:1 Fs:16}



static void Test_BFu31i_BFu1ll_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu1ll_BFu16s");
    static STRUCT_IF_C BFu31i_BFu1ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu31i_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu1ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_BFu16s, BFu31i_BFu1ll_BFu16s)
//============================================================================


struct  BFu31i_BFu1ll_BFu17i  {
  unsigned int v1:31;
  __tsu64 v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu31i_BFu1ll_BFu17i) C1{ Fi:31 FL:1 Fi:17}



static void Test_BFu31i_BFu1ll_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu1ll_BFu17i");
    static STRUCT_IF_C BFu31i_BFu1ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu31i_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu1ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_BFu17i, BFu31i_BFu1ll_BFu17i)
//============================================================================


struct  BFu31i_BFu1ll_BFu17ll  {
  unsigned int v1:31;
  __tsu64 v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_BFu1ll_BFu17ll) C1{ Fi:31 FL:1 FL:17}



static void Test_BFu31i_BFu1ll_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu1ll_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu1ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu31i_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu1ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_BFu17ll, BFu31i_BFu1ll_BFu17ll)
//============================================================================


struct  BFu31i_BFu1ll_BFu1c  {
  unsigned int v1:31;
  __tsu64 v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu31i_BFu1ll_BFu1c) C1{ Fi:31 FL:1 Fc:1}



static void Test_BFu31i_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu1ll_BFu1c");
    static STRUCT_IF_C BFu31i_BFu1ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31i_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_BFu1c, BFu31i_BFu1ll_BFu1c)
//============================================================================


struct  BFu31i_BFu1ll_BFu1i  {
  unsigned int v1:31;
  __tsu64 v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu31i_BFu1ll_BFu1i) C1{ Fi:31 FL:1 Fi:1}



static void Test_BFu31i_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu1ll_BFu1i");
    static STRUCT_IF_C BFu31i_BFu1ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31i_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_BFu1i, BFu31i_BFu1ll_BFu1i)
//============================================================================


struct  BFu31i_BFu1ll_BFu1ll  {
  unsigned int v1:31;
  __tsu64 v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_BFu1ll_BFu1ll) C1{ Fi:31 FL:1 FL:1}



static void Test_BFu31i_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31i_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_BFu1ll, BFu31i_BFu1ll_BFu1ll)
//============================================================================


struct  BFu31i_BFu1ll_BFu1s  {
  unsigned int v1:31;
  __tsu64 v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu31i_BFu1ll_BFu1s) C1{ Fi:31 FL:1 Fs:1}



static void Test_BFu31i_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu1ll_BFu1s");
    static STRUCT_IF_C BFu31i_BFu1ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31i_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_BFu1s, BFu31i_BFu1ll_BFu1s)
//============================================================================


struct  BFu31i_BFu1ll_BFu31i  {
  unsigned int v1:31;
  __tsu64 v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFu1ll_BFu31i) C1{ Fi:31 FL:1 Fi:31}



static void Test_BFu31i_BFu1ll_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu1ll_BFu31i");
    static STRUCT_IF_C BFu31i_BFu1ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu31i_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_BFu31i, BFu31i_BFu1ll_BFu31i)
//============================================================================


struct  BFu31i_BFu1ll_BFu31ll  {
  unsigned int v1:31;
  __tsu64 v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFu1ll_BFu31ll) C1{ Fi:31 FL:1 FL:31}



static void Test_BFu31i_BFu1ll_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu1ll_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu1ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu31i_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_BFu31ll, BFu31i_BFu1ll_BFu31ll)
//============================================================================


struct  BFu31i_BFu1ll_BFu32i  {
  unsigned int v1:31;
  __tsu64 v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu31i_BFu1ll_BFu32i) C1{ Fi:31 FL:1 Fi:32}



static void Test_BFu31i_BFu1ll_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu1ll_BFu32i");
    static STRUCT_IF_C BFu31i_BFu1ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu31i_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu1ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_BFu32i, BFu31i_BFu1ll_BFu32i)
//============================================================================


struct  BFu31i_BFu1ll_BFu32ll  {
  unsigned int v1:31;
  __tsu64 v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_BFu1ll_BFu32ll) C1{ Fi:31 FL:1 FL:32}



static void Test_BFu31i_BFu1ll_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu1ll_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu1ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu31i_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu1ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_BFu32ll, BFu31i_BFu1ll_BFu32ll)
//============================================================================


struct  BFu31i_BFu1ll_BFu33  {
  unsigned int v1:31;
  __tsu64 v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_BFu1ll_BFu33) C1{ Fi:31 FL:1 FL:33}



static void Test_BFu31i_BFu1ll_BFu33()
{
  {
    init_simple_test("BFu31i_BFu1ll_BFu33");
    static STRUCT_IF_C BFu31i_BFu1ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu1ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu31i_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu31i_BFu1ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_BFu33, BFu31i_BFu1ll_BFu33)
//============================================================================


struct  BFu31i_BFu1ll_BFu7c  {
  unsigned int v1:31;
  __tsu64 v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu31i_BFu1ll_BFu7c) C1{ Fi:31 FL:1 Fc:7}



static void Test_BFu31i_BFu1ll_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu1ll_BFu7c");
    static STRUCT_IF_C BFu31i_BFu1ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31i_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu1ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_BFu7c, BFu31i_BFu1ll_BFu7c)
//============================================================================


struct  BFu31i_BFu1ll_BFu7i  {
  unsigned int v1:31;
  __tsu64 v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu31i_BFu1ll_BFu7i) C1{ Fi:31 FL:1 Fi:7}



static void Test_BFu31i_BFu1ll_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu1ll_BFu7i");
    static STRUCT_IF_C BFu31i_BFu1ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31i_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu1ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_BFu7i, BFu31i_BFu1ll_BFu7i)
//============================================================================


struct  BFu31i_BFu1ll_BFu7ll  {
  unsigned int v1:31;
  __tsu64 v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_BFu1ll_BFu7ll) C1{ Fi:31 FL:1 FL:7}



static void Test_BFu31i_BFu1ll_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu1ll_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu1ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31i_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu1ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_BFu7ll, BFu31i_BFu1ll_BFu7ll)
//============================================================================


struct  BFu31i_BFu1ll_BFu7s  {
  unsigned int v1:31;
  __tsu64 v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu31i_BFu1ll_BFu7s) C1{ Fi:31 FL:1 Fs:7}



static void Test_BFu31i_BFu1ll_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu1ll_BFu7s");
    static STRUCT_IF_C BFu31i_BFu1ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31i_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu1ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_BFu7s, BFu31i_BFu1ll_BFu7s)
//============================================================================


struct  BFu31i_BFu1ll_BFu8c  {
  unsigned int v1:31;
  __tsu64 v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu31i_BFu1ll_BFu8c) C1{ Fi:31 FL:1 Fc:8}



static void Test_BFu31i_BFu1ll_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu1ll_BFu8c");
    static STRUCT_IF_C BFu31i_BFu1ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31i_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu1ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_BFu8c, BFu31i_BFu1ll_BFu8c)
//============================================================================


struct  BFu31i_BFu1ll_BFu8i  {
  unsigned int v1:31;
  __tsu64 v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu31i_BFu1ll_BFu8i) C1{ Fi:31 FL:1 Fi:8}



static void Test_BFu31i_BFu1ll_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu1ll_BFu8i");
    static STRUCT_IF_C BFu31i_BFu1ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31i_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu1ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_BFu8i, BFu31i_BFu1ll_BFu8i)
//============================================================================


struct  BFu31i_BFu1ll_BFu8ll  {
  unsigned int v1:31;
  __tsu64 v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_BFu1ll_BFu8ll) C1{ Fi:31 FL:1 FL:8}



static void Test_BFu31i_BFu1ll_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu1ll_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu1ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31i_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu1ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_BFu8ll, BFu31i_BFu1ll_BFu8ll)
//============================================================================


struct  BFu31i_BFu1ll_BFu8s  {
  unsigned int v1:31;
  __tsu64 v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu31i_BFu1ll_BFu8s) C1{ Fi:31 FL:1 Fs:8}



static void Test_BFu31i_BFu1ll_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu1ll_BFu8s");
    static STRUCT_IF_C BFu31i_BFu1ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31i_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu1ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_BFu8s, BFu31i_BFu1ll_BFu8s)
//============================================================================


struct  BFu31i_BFu1ll_BFu9i  {
  unsigned int v1:31;
  __tsu64 v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu31i_BFu1ll_BFu9i) C1{ Fi:31 FL:1 Fi:9}



static void Test_BFu31i_BFu1ll_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu1ll_BFu9i");
    static STRUCT_IF_C BFu31i_BFu1ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu31i_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu1ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_BFu9i, BFu31i_BFu1ll_BFu9i)
//============================================================================


struct  BFu31i_BFu1ll_BFu9ll  {
  unsigned int v1:31;
  __tsu64 v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_BFu1ll_BFu9ll) C1{ Fi:31 FL:1 FL:9}



static void Test_BFu31i_BFu1ll_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu1ll_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu1ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu31i_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu1ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_BFu9ll, BFu31i_BFu1ll_BFu9ll)
//============================================================================


struct  BFu31i_BFu1ll_BFu9s  {
  unsigned int v1:31;
  __tsu64 v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu31i_BFu1ll_BFu9s) C1{ Fi:31 FL:1 Fs:9}



static void Test_BFu31i_BFu1ll_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu1ll_BFu9s");
    static STRUCT_IF_C BFu31i_BFu1ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu31i_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu1ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_BFu9s, BFu31i_BFu1ll_BFu9s)
//============================================================================


struct  BFu31i_BFu1ll_C  {
  unsigned int v1:31;
  __tsu64 v2:1;
  char v3;
};
//SIG(1 BFu31i_BFu1ll_C) C1{ Fi:31 FL:1 Fc}



static void Test_BFu31i_BFu1ll_C()
{
  {
    init_simple_test("BFu31i_BFu1ll_C");
    static STRUCT_IF_C BFu31i_BFu1ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_C");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_C");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_C, BFu31i_BFu1ll_C)
//============================================================================


struct  BFu31i_BFu1ll_D  {
  unsigned int v1:31;
  __tsu64 v2:1;
  double v3;
};
//SIG(1 BFu31i_BFu1ll_D) C1{ Fi:31 FL:1 FL}



static void Test_BFu31i_BFu1ll_D()
{
  {
    init_simple_test("BFu31i_BFu1ll_D");
    static STRUCT_IF_C BFu31i_BFu1ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu1ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_D");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31i_BFu1ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_D, BFu31i_BFu1ll_D)
//============================================================================


struct  BFu31i_BFu1ll_F  {
  unsigned int v1:31;
  __tsu64 v2:1;
  float v3;
};
//SIG(1 BFu31i_BFu1ll_F) C1{ Fi:31 FL:1 Fi}



static void Test_BFu31i_BFu1ll_F()
{
  {
    init_simple_test("BFu31i_BFu1ll_F");
    static STRUCT_IF_C BFu31i_BFu1ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_F");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_F");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_F, BFu31i_BFu1ll_F)
//============================================================================


struct  BFu31i_BFu1ll_I  {
  unsigned int v1:31;
  __tsu64 v2:1;
  int v3;
};
//SIG(1 BFu31i_BFu1ll_I) C1{ Fi:31 FL:1 Fi}



static void Test_BFu31i_BFu1ll_I()
{
  {
    init_simple_test("BFu31i_BFu1ll_I");
    static STRUCT_IF_C BFu31i_BFu1ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_I");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_I");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_I, BFu31i_BFu1ll_I)
//============================================================================


struct  BFu31i_BFu1ll_Ip  {
  unsigned int v1:31;
  __tsu64 v2:1;
  int *v3;
};
//SIG(1 BFu31i_BFu1ll_Ip) C1{ Fi:31 FL:1 Fp}



static void Test_BFu31i_BFu1ll_Ip()
{
  {
    init_simple_test("BFu31i_BFu1ll_Ip");
    static STRUCT_IF_C BFu31i_BFu1ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu31i_BFu1ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_Ip");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31i_BFu1ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_Ip, BFu31i_BFu1ll_Ip)
//============================================================================


struct  BFu31i_BFu1ll_L  {
  unsigned int v1:31;
  __tsu64 v2:1;
  __tsi64 v3;
};
//SIG(1 BFu31i_BFu1ll_L) C1{ Fi:31 FL:1 FL}



static void Test_BFu31i_BFu1ll_L()
{
  {
    init_simple_test("BFu31i_BFu1ll_L");
    static STRUCT_IF_C BFu31i_BFu1ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu1ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_L");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31i_BFu1ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_L, BFu31i_BFu1ll_L)
//============================================================================


struct  BFu31i_BFu1ll_S  {
  unsigned int v1:31;
  __tsu64 v2:1;
  short v3;
};
//SIG(1 BFu31i_BFu1ll_S) C1{ Fi:31 FL:1 Fs}



static void Test_BFu31i_BFu1ll_S()
{
  {
    init_simple_test("BFu31i_BFu1ll_S");
    static STRUCT_IF_C BFu31i_BFu1ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_S");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_S");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_S, BFu31i_BFu1ll_S)
//============================================================================


struct  BFu31i_BFu1ll_Uc  {
  unsigned int v1:31;
  __tsu64 v2:1;
  unsigned char v3;
};
//SIG(1 BFu31i_BFu1ll_Uc) C1{ Fi:31 FL:1 Fc}



static void Test_BFu31i_BFu1ll_Uc()
{
  {
    init_simple_test("BFu31i_BFu1ll_Uc");
    static STRUCT_IF_C BFu31i_BFu1ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_Uc");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_Uc");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_Uc, BFu31i_BFu1ll_Uc)
//============================================================================


struct  BFu31i_BFu1ll_Ui  {
  unsigned int v1:31;
  __tsu64 v2:1;
  unsigned int v3;
};
//SIG(1 BFu31i_BFu1ll_Ui) C1{ Fi:31 FL:1 Fi}



static void Test_BFu31i_BFu1ll_Ui()
{
  {
    init_simple_test("BFu31i_BFu1ll_Ui");
    static STRUCT_IF_C BFu31i_BFu1ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_Ui");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_Ui");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_Ui, BFu31i_BFu1ll_Ui)
//============================================================================


struct  BFu31i_BFu1ll_Ul  {
  unsigned int v1:31;
  __tsu64 v2:1;
  __tsu64 v3;
};
//SIG(1 BFu31i_BFu1ll_Ul) C1{ Fi:31 FL:1 FL}



static void Test_BFu31i_BFu1ll_Ul()
{
  {
    init_simple_test("BFu31i_BFu1ll_Ul");
    static STRUCT_IF_C BFu31i_BFu1ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu1ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_Ul");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31i_BFu1ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_Ul, BFu31i_BFu1ll_Ul)
//============================================================================


struct  BFu31i_BFu1ll_Us  {
  unsigned int v1:31;
  __tsu64 v2:1;
  unsigned short v3;
};
//SIG(1 BFu31i_BFu1ll_Us) C1{ Fi:31 FL:1 Fs}



static void Test_BFu31i_BFu1ll_Us()
{
  {
    init_simple_test("BFu31i_BFu1ll_Us");
    static STRUCT_IF_C BFu31i_BFu1ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_Us");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_Us");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_Us, BFu31i_BFu1ll_Us)
//============================================================================


struct  BFu31i_BFu1ll_Vp  {
  unsigned int v1:31;
  __tsu64 v2:1;
  void *v3;
};
//SIG(1 BFu31i_BFu1ll_Vp) C1{ Fi:31 FL:1 Fp}



static void Test_BFu31i_BFu1ll_Vp()
{
  {
    init_simple_test("BFu31i_BFu1ll_Vp");
    static STRUCT_IF_C BFu31i_BFu1ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu31i_BFu1ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_Vp");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31i_BFu1ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1ll_Vp, BFu31i_BFu1ll_Vp)
//============================================================================


struct  BFu31i_BFu1s  {
  unsigned int v1:31;
  unsigned short v2:1;
};
//SIG(1 BFu31i_BFu1s) C1{ Fi:31 Fs:1}



static void Test_BFu31i_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu1s");
    static STRUCT_IF_C BFu31i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu31i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s, BFu31i_BFu1s)
//============================================================================


struct  BFu31i_BFu1s_BFu15i  {
  unsigned int v1:31;
  unsigned short v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu31i_BFu1s_BFu15i) C1{ Fi:31 Fs:1 Fi:15}



static void Test_BFu31i_BFu1s_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu1s_BFu15i");
    static STRUCT_IF_C BFu31i_BFu1s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu31i_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu1s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_BFu15i, BFu31i_BFu1s_BFu15i)
//============================================================================


struct  BFu31i_BFu1s_BFu15ll  {
  unsigned int v1:31;
  unsigned short v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_BFu1s_BFu15ll) C1{ Fi:31 Fs:1 FL:15}



static void Test_BFu31i_BFu1s_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu1s_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu1s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu31i_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu1s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_BFu15ll, BFu31i_BFu1s_BFu15ll)
//============================================================================


struct  BFu31i_BFu1s_BFu15s  {
  unsigned int v1:31;
  unsigned short v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu31i_BFu1s_BFu15s) C1{ Fi:31 Fs:1 Fs:15}



static void Test_BFu31i_BFu1s_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu1s_BFu15s");
    static STRUCT_IF_C BFu31i_BFu1s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu31i_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu1s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_BFu15s, BFu31i_BFu1s_BFu15s)
//============================================================================


struct  BFu31i_BFu1s_BFu16i  {
  unsigned int v1:31;
  unsigned short v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu31i_BFu1s_BFu16i) C1{ Fi:31 Fs:1 Fi:16}



static void Test_BFu31i_BFu1s_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu1s_BFu16i");
    static STRUCT_IF_C BFu31i_BFu1s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu31i_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu1s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_BFu16i, BFu31i_BFu1s_BFu16i)
//============================================================================


struct  BFu31i_BFu1s_BFu16ll  {
  unsigned int v1:31;
  unsigned short v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_BFu1s_BFu16ll) C1{ Fi:31 Fs:1 FL:16}



static void Test_BFu31i_BFu1s_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu1s_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu1s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu31i_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu1s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_BFu16ll, BFu31i_BFu1s_BFu16ll)
//============================================================================


struct  BFu31i_BFu1s_BFu16s  {
  unsigned int v1:31;
  unsigned short v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu31i_BFu1s_BFu16s) C1{ Fi:31 Fs:1 Fs:16}



static void Test_BFu31i_BFu1s_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu1s_BFu16s");
    static STRUCT_IF_C BFu31i_BFu1s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu31i_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu1s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_BFu16s, BFu31i_BFu1s_BFu16s)
//============================================================================


struct  BFu31i_BFu1s_BFu17i  {
  unsigned int v1:31;
  unsigned short v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu31i_BFu1s_BFu17i) C1{ Fi:31 Fs:1 Fi:17}



static void Test_BFu31i_BFu1s_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu1s_BFu17i");
    static STRUCT_IF_C BFu31i_BFu1s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu31i_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu1s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_BFu17i, BFu31i_BFu1s_BFu17i)
//============================================================================


struct  BFu31i_BFu1s_BFu17ll  {
  unsigned int v1:31;
  unsigned short v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_BFu1s_BFu17ll) C1{ Fi:31 Fs:1 FL:17}



static void Test_BFu31i_BFu1s_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu1s_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu1s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu31i_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu1s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_BFu17ll, BFu31i_BFu1s_BFu17ll)
//============================================================================


struct  BFu31i_BFu1s_BFu1c  {
  unsigned int v1:31;
  unsigned short v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu31i_BFu1s_BFu1c) C1{ Fi:31 Fs:1 Fc:1}



static void Test_BFu31i_BFu1s_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu1s_BFu1c");
    static STRUCT_IF_C BFu31i_BFu1s_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31i_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_BFu1c, BFu31i_BFu1s_BFu1c)
//============================================================================


struct  BFu31i_BFu1s_BFu1i  {
  unsigned int v1:31;
  unsigned short v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu31i_BFu1s_BFu1i) C1{ Fi:31 Fs:1 Fi:1}



static void Test_BFu31i_BFu1s_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu1s_BFu1i");
    static STRUCT_IF_C BFu31i_BFu1s_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31i_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_BFu1i, BFu31i_BFu1s_BFu1i)
//============================================================================


struct  BFu31i_BFu1s_BFu1ll  {
  unsigned int v1:31;
  unsigned short v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_BFu1s_BFu1ll) C1{ Fi:31 Fs:1 FL:1}



static void Test_BFu31i_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu1s_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu1s_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31i_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_BFu1ll, BFu31i_BFu1s_BFu1ll)
//============================================================================


struct  BFu31i_BFu1s_BFu1s  {
  unsigned int v1:31;
  unsigned short v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu31i_BFu1s_BFu1s) C1{ Fi:31 Fs:1 Fs:1}



static void Test_BFu31i_BFu1s_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu1s_BFu1s");
    static STRUCT_IF_C BFu31i_BFu1s_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31i_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_BFu1s, BFu31i_BFu1s_BFu1s)
//============================================================================


struct  BFu31i_BFu1s_BFu31i  {
  unsigned int v1:31;
  unsigned short v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFu1s_BFu31i) C1{ Fi:31 Fs:1 Fi:31}



static void Test_BFu31i_BFu1s_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu1s_BFu31i");
    static STRUCT_IF_C BFu31i_BFu1s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu31i_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_BFu31i, BFu31i_BFu1s_BFu31i)
//============================================================================


struct  BFu31i_BFu1s_BFu31ll  {
  unsigned int v1:31;
  unsigned short v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFu1s_BFu31ll) C1{ Fi:31 Fs:1 FL:31}



static void Test_BFu31i_BFu1s_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu1s_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu1s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu31i_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_BFu31ll, BFu31i_BFu1s_BFu31ll)
//============================================================================


struct  BFu31i_BFu1s_BFu32i  {
  unsigned int v1:31;
  unsigned short v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu31i_BFu1s_BFu32i) C1{ Fi:31 Fs:1 Fi:32}



static void Test_BFu31i_BFu1s_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu1s_BFu32i");
    static STRUCT_IF_C BFu31i_BFu1s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu31i_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu1s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_BFu32i, BFu31i_BFu1s_BFu32i)
//============================================================================


struct  BFu31i_BFu1s_BFu32ll  {
  unsigned int v1:31;
  unsigned short v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_BFu1s_BFu32ll) C1{ Fi:31 Fs:1 FL:32}



static void Test_BFu31i_BFu1s_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu1s_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu1s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu31i_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu1s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_BFu32ll, BFu31i_BFu1s_BFu32ll)
//============================================================================


struct  BFu31i_BFu1s_BFu33  {
  unsigned int v1:31;
  unsigned short v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_BFu1s_BFu33) C1{ Fi:31 Fs:1 FL:33}



static void Test_BFu31i_BFu1s_BFu33()
{
  {
    init_simple_test("BFu31i_BFu1s_BFu33");
    static STRUCT_IF_C BFu31i_BFu1s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu1s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu31i_BFu1s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu31i_BFu1s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_BFu33, BFu31i_BFu1s_BFu33)
//============================================================================


struct  BFu31i_BFu1s_BFu7c  {
  unsigned int v1:31;
  unsigned short v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu31i_BFu1s_BFu7c) C1{ Fi:31 Fs:1 Fc:7}



static void Test_BFu31i_BFu1s_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu1s_BFu7c");
    static STRUCT_IF_C BFu31i_BFu1s_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31i_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu1s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_BFu7c, BFu31i_BFu1s_BFu7c)
//============================================================================


struct  BFu31i_BFu1s_BFu7i  {
  unsigned int v1:31;
  unsigned short v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu31i_BFu1s_BFu7i) C1{ Fi:31 Fs:1 Fi:7}



static void Test_BFu31i_BFu1s_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu1s_BFu7i");
    static STRUCT_IF_C BFu31i_BFu1s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31i_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu1s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_BFu7i, BFu31i_BFu1s_BFu7i)
//============================================================================


struct  BFu31i_BFu1s_BFu7ll  {
  unsigned int v1:31;
  unsigned short v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_BFu1s_BFu7ll) C1{ Fi:31 Fs:1 FL:7}



static void Test_BFu31i_BFu1s_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu1s_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu1s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31i_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu1s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_BFu7ll, BFu31i_BFu1s_BFu7ll)
//============================================================================


struct  BFu31i_BFu1s_BFu7s  {
  unsigned int v1:31;
  unsigned short v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu31i_BFu1s_BFu7s) C1{ Fi:31 Fs:1 Fs:7}



static void Test_BFu31i_BFu1s_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu1s_BFu7s");
    static STRUCT_IF_C BFu31i_BFu1s_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31i_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu1s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_BFu7s, BFu31i_BFu1s_BFu7s)
//============================================================================


struct  BFu31i_BFu1s_BFu8c  {
  unsigned int v1:31;
  unsigned short v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu31i_BFu1s_BFu8c) C1{ Fi:31 Fs:1 Fc:8}



static void Test_BFu31i_BFu1s_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu1s_BFu8c");
    static STRUCT_IF_C BFu31i_BFu1s_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31i_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu1s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_BFu8c, BFu31i_BFu1s_BFu8c)
//============================================================================


struct  BFu31i_BFu1s_BFu8i  {
  unsigned int v1:31;
  unsigned short v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu31i_BFu1s_BFu8i) C1{ Fi:31 Fs:1 Fi:8}



static void Test_BFu31i_BFu1s_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu1s_BFu8i");
    static STRUCT_IF_C BFu31i_BFu1s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31i_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu1s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_BFu8i, BFu31i_BFu1s_BFu8i)
//============================================================================


struct  BFu31i_BFu1s_BFu8ll  {
  unsigned int v1:31;
  unsigned short v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_BFu1s_BFu8ll) C1{ Fi:31 Fs:1 FL:8}



static void Test_BFu31i_BFu1s_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu1s_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu1s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31i_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu1s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_BFu8ll, BFu31i_BFu1s_BFu8ll)
//============================================================================


struct  BFu31i_BFu1s_BFu8s  {
  unsigned int v1:31;
  unsigned short v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu31i_BFu1s_BFu8s) C1{ Fi:31 Fs:1 Fs:8}



static void Test_BFu31i_BFu1s_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu1s_BFu8s");
    static STRUCT_IF_C BFu31i_BFu1s_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31i_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu1s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_BFu8s, BFu31i_BFu1s_BFu8s)
//============================================================================


struct  BFu31i_BFu1s_BFu9i  {
  unsigned int v1:31;
  unsigned short v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu31i_BFu1s_BFu9i) C1{ Fi:31 Fs:1 Fi:9}



static void Test_BFu31i_BFu1s_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu1s_BFu9i");
    static STRUCT_IF_C BFu31i_BFu1s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu31i_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu1s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_BFu9i, BFu31i_BFu1s_BFu9i)
//============================================================================


struct  BFu31i_BFu1s_BFu9ll  {
  unsigned int v1:31;
  unsigned short v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_BFu1s_BFu9ll) C1{ Fi:31 Fs:1 FL:9}



static void Test_BFu31i_BFu1s_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu1s_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu1s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu31i_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu1s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_BFu9ll, BFu31i_BFu1s_BFu9ll)
//============================================================================


struct  BFu31i_BFu1s_BFu9s  {
  unsigned int v1:31;
  unsigned short v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu31i_BFu1s_BFu9s) C1{ Fi:31 Fs:1 Fs:9}



static void Test_BFu31i_BFu1s_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu1s_BFu9s");
    static STRUCT_IF_C BFu31i_BFu1s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu31i_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu1s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_BFu9s, BFu31i_BFu1s_BFu9s)
//============================================================================


struct  BFu31i_BFu1s_C  {
  unsigned int v1:31;
  unsigned short v2:1;
  char v3;
};
//SIG(1 BFu31i_BFu1s_C) C1{ Fi:31 Fs:1 Fc}



static void Test_BFu31i_BFu1s_C()
{
  {
    init_simple_test("BFu31i_BFu1s_C");
    static STRUCT_IF_C BFu31i_BFu1s_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1s_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_C");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_C");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_C, BFu31i_BFu1s_C)
//============================================================================


struct  BFu31i_BFu1s_D  {
  unsigned int v1:31;
  unsigned short v2:1;
  double v3;
};
//SIG(1 BFu31i_BFu1s_D) C1{ Fi:31 Fs:1 FL}



static void Test_BFu31i_BFu1s_D()
{
  {
    init_simple_test("BFu31i_BFu1s_D");
    static STRUCT_IF_C BFu31i_BFu1s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu1s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1s_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_D");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31i_BFu1s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_D, BFu31i_BFu1s_D)
//============================================================================


struct  BFu31i_BFu1s_F  {
  unsigned int v1:31;
  unsigned short v2:1;
  float v3;
};
//SIG(1 BFu31i_BFu1s_F) C1{ Fi:31 Fs:1 Fi}



static void Test_BFu31i_BFu1s_F()
{
  {
    init_simple_test("BFu31i_BFu1s_F");
    static STRUCT_IF_C BFu31i_BFu1s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1s_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_F");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_F");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_F, BFu31i_BFu1s_F)
//============================================================================


struct  BFu31i_BFu1s_I  {
  unsigned int v1:31;
  unsigned short v2:1;
  int v3;
};
//SIG(1 BFu31i_BFu1s_I) C1{ Fi:31 Fs:1 Fi}



static void Test_BFu31i_BFu1s_I()
{
  {
    init_simple_test("BFu31i_BFu1s_I");
    static STRUCT_IF_C BFu31i_BFu1s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1s_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_I");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_I");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_I, BFu31i_BFu1s_I)
//============================================================================


struct  BFu31i_BFu1s_Ip  {
  unsigned int v1:31;
  unsigned short v2:1;
  int *v3;
};
//SIG(1 BFu31i_BFu1s_Ip) C1{ Fi:31 Fs:1 Fp}



static void Test_BFu31i_BFu1s_Ip()
{
  {
    init_simple_test("BFu31i_BFu1s_Ip");
    static STRUCT_IF_C BFu31i_BFu1s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu31i_BFu1s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_Ip");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31i_BFu1s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_Ip, BFu31i_BFu1s_Ip)
//============================================================================


struct  BFu31i_BFu1s_L  {
  unsigned int v1:31;
  unsigned short v2:1;
  __tsi64 v3;
};
//SIG(1 BFu31i_BFu1s_L) C1{ Fi:31 Fs:1 FL}



static void Test_BFu31i_BFu1s_L()
{
  {
    init_simple_test("BFu31i_BFu1s_L");
    static STRUCT_IF_C BFu31i_BFu1s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu1s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1s_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_L");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31i_BFu1s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_L, BFu31i_BFu1s_L)
//============================================================================


struct  BFu31i_BFu1s_S  {
  unsigned int v1:31;
  unsigned short v2:1;
  short v3;
};
//SIG(1 BFu31i_BFu1s_S) C1{ Fi:31 Fs:1 Fs}



static void Test_BFu31i_BFu1s_S()
{
  {
    init_simple_test("BFu31i_BFu1s_S");
    static STRUCT_IF_C BFu31i_BFu1s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1s_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_S");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_S");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_S, BFu31i_BFu1s_S)
//============================================================================


struct  BFu31i_BFu1s_Uc  {
  unsigned int v1:31;
  unsigned short v2:1;
  unsigned char v3;
};
//SIG(1 BFu31i_BFu1s_Uc) C1{ Fi:31 Fs:1 Fc}



static void Test_BFu31i_BFu1s_Uc()
{
  {
    init_simple_test("BFu31i_BFu1s_Uc");
    static STRUCT_IF_C BFu31i_BFu1s_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_Uc");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_Uc");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_Uc, BFu31i_BFu1s_Uc)
//============================================================================


struct  BFu31i_BFu1s_Ui  {
  unsigned int v1:31;
  unsigned short v2:1;
  unsigned int v3;
};
//SIG(1 BFu31i_BFu1s_Ui) C1{ Fi:31 Fs:1 Fi}



static void Test_BFu31i_BFu1s_Ui()
{
  {
    init_simple_test("BFu31i_BFu1s_Ui");
    static STRUCT_IF_C BFu31i_BFu1s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_Ui");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_Ui");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_Ui, BFu31i_BFu1s_Ui)
//============================================================================


struct  BFu31i_BFu1s_Ul  {
  unsigned int v1:31;
  unsigned short v2:1;
  __tsu64 v3;
};
//SIG(1 BFu31i_BFu1s_Ul) C1{ Fi:31 Fs:1 FL}



static void Test_BFu31i_BFu1s_Ul()
{
  {
    init_simple_test("BFu31i_BFu1s_Ul");
    static STRUCT_IF_C BFu31i_BFu1s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu1s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_Ul");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31i_BFu1s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_Ul, BFu31i_BFu1s_Ul)
//============================================================================


struct  BFu31i_BFu1s_Us  {
  unsigned int v1:31;
  unsigned short v2:1;
  unsigned short v3;
};
//SIG(1 BFu31i_BFu1s_Us) C1{ Fi:31 Fs:1 Fs}



static void Test_BFu31i_BFu1s_Us()
{
  {
    init_simple_test("BFu31i_BFu1s_Us");
    static STRUCT_IF_C BFu31i_BFu1s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_Us");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_Us");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_Us, BFu31i_BFu1s_Us)
//============================================================================


struct  BFu31i_BFu1s_Vp  {
  unsigned int v1:31;
  unsigned short v2:1;
  void *v3;
};
//SIG(1 BFu31i_BFu1s_Vp) C1{ Fi:31 Fs:1 Fp}



static void Test_BFu31i_BFu1s_Vp()
{
  {
    init_simple_test("BFu31i_BFu1s_Vp");
    static STRUCT_IF_C BFu31i_BFu1s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu31i_BFu1s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_Vp");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31i_BFu1s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu1s_Vp, BFu31i_BFu1s_Vp)
//============================================================================


struct  BFu31i_BFu31i  {
  unsigned int v1:31;
  unsigned int v2:31;
};
//SIG(1 BFu31i_BFu31i) C1{ Fi:31 Fi:31}



static void Test_BFu31i_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu31i");
    static STRUCT_IF_C BFu31i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i, BFu31i_BFu31i)
//============================================================================


struct  BFu31i_BFu31i_BFs31i  {
  unsigned int v1:31;
  unsigned int v2:31;
  signed int v3:31;
};
//SIG(1 BFu31i_BFu31i_BFs31i) C1{ Fi:31 Fi:31 Fi:31}



static void Test_BFu31i_BFu31i_BFs31i()
{
  {
    init_simple_test("BFu31i_BFu31i_BFs31i");
    static STRUCT_IF_C BFu31i_BFu31i_BFs31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu31i_BFs31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31i_BFu31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFs31i, BFu31i_BFu31i_BFs31i)
//============================================================================


struct  BFu31i_BFu31i_BFs31i_BFs31i  {
  unsigned int v1:31;
  unsigned int v2:31;
  signed int v3:31;
  signed int v4:31;
};
//SIG(1 BFu31i_BFu31i_BFs31i_BFs31i) C1{ Fi:31 Fi:31 Fi:31 Fi:31}



static void Test_BFu31i_BFu31i_BFs31i_BFs31i()
{
  {
    init_simple_test("BFu31i_BFu31i_BFs31i_BFs31i");
    static STRUCT_IF_C BFu31i_BFu31i_BFs31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31i_BFs31i_BFs31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_BFs31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31i_BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31i_BFu31i_BFs31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFs31i_BFs31i, BFu31i_BFu31i_BFs31i_BFs31i)
//============================================================================


struct  BFu31i_BFu31i_BFs31i_BFs31ll  {
  unsigned int v1:31;
  unsigned int v2:31;
  signed int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31i_BFu31i_BFs31i_BFs31ll) C1{ Fi:31 Fi:31 Fi:31 FL:31}



static void Test_BFu31i_BFu31i_BFs31i_BFs31ll()
{
  {
    init_simple_test("BFu31i_BFu31i_BFs31i_BFs31ll");
    static STRUCT_IF_C BFu31i_BFu31i_BFs31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31i_BFs31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31i_BFs31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31i_BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31i_BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFu31i_BFu31i_BFs31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFs31i_BFs31ll, BFu31i_BFu31i_BFs31i_BFs31ll)
//============================================================================


struct  BFu31i_BFu31i_BFs31i_BFu31i  {
  unsigned int v1:31;
  unsigned int v2:31;
  signed int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31i_BFu31i_BFs31i_BFu31i) C1{ Fi:31 Fi:31 Fi:31 Fi:31}



static void Test_BFu31i_BFu31i_BFs31i_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu31i_BFs31i_BFu31i");
    static STRUCT_IF_C BFu31i_BFu31i_BFs31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31i_BFs31i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_BFs31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31i_BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFs31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFs31i_BFu31i, BFu31i_BFu31i_BFs31i_BFu31i)
//============================================================================


struct  BFu31i_BFu31i_BFs31i_BFu31ll  {
  unsigned int v1:31;
  unsigned int v2:31;
  signed int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31i_BFu31i_BFs31i_BFu31ll) C1{ Fi:31 Fi:31 Fi:31 FL:31}



static void Test_BFu31i_BFu31i_BFs31i_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu31i_BFs31i_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu31i_BFs31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31i_BFs31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31i_BFs31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31i_BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31i_BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFs31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFs31i_BFu31ll, BFu31i_BFu31i_BFs31i_BFu31ll)
//============================================================================


struct  BFu31i_BFu31i_BFs31ll  {
  unsigned int v1:31;
  unsigned int v2:31;
  signed __tsi64 v3:31;
};
//SIG(1 BFu31i_BFu31i_BFs31ll) C1{ Fi:31 Fi:31 FL:31}



static void Test_BFu31i_BFu31i_BFs31ll()
{
  {
    init_simple_test("BFu31i_BFu31i_BFs31ll");
    static STRUCT_IF_C BFu31i_BFu31i_BFs31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFu31i_BFu31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFs31ll, BFu31i_BFu31i_BFs31ll)
//============================================================================


struct  BFu31i_BFu31i_BFs31ll_BFs31i  {
  unsigned int v1:31;
  unsigned int v2:31;
  signed __tsi64 v3:31;
  signed int v4:31;
};
//SIG(1 BFu31i_BFu31i_BFs31ll_BFs31i) C1{ Fi:31 Fi:31 FL:31 Fi:31}



static void Test_BFu31i_BFu31i_BFs31ll_BFs31i()
{
  {
    init_simple_test("BFu31i_BFu31i_BFs31ll_BFs31i");
    static STRUCT_IF_C BFu31i_BFu31i_BFs31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31i_BFs31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31i_BFs31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31i_BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFu31i_BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31i_BFu31i_BFs31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFs31ll_BFs31i, BFu31i_BFu31i_BFs31ll_BFs31i)
//============================================================================


struct  BFu31i_BFu31i_BFs31ll_BFs31ll  {
  unsigned int v1:31;
  unsigned int v2:31;
  signed __tsi64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31i_BFu31i_BFs31ll_BFs31ll) C1{ Fi:31 Fi:31 FL:31 FL:31}



static void Test_BFu31i_BFu31i_BFs31ll_BFs31ll()
{
  {
    init_simple_test("BFu31i_BFu31i_BFs31ll_BFs31ll");
    static STRUCT_IF_C BFu31i_BFu31i_BFs31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31i_BFs31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31i_BFs31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31i_BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFu31i_BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFu31i_BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_sll(1LL<<30), "BFu31i_BFu31i_BFs31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFs31ll_BFs31ll, BFu31i_BFu31i_BFs31ll_BFs31ll)
//============================================================================


struct  BFu31i_BFu31i_BFs31ll_BFu31i  {
  unsigned int v1:31;
  unsigned int v2:31;
  signed __tsi64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31i_BFu31i_BFs31ll_BFu31i) C1{ Fi:31 Fi:31 FL:31 Fi:31}



static void Test_BFu31i_BFu31i_BFs31ll_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu31i_BFs31ll_BFu31i");
    static STRUCT_IF_C BFu31i_BFu31i_BFs31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31i_BFs31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31i_BFs31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31i_BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFu31i_BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFs31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFs31ll_BFu31i, BFu31i_BFu31i_BFs31ll_BFu31i)
//============================================================================


struct  BFu31i_BFu31i_BFs31ll_BFu31ll  {
  unsigned int v1:31;
  unsigned int v2:31;
  signed __tsi64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31i_BFu31i_BFs31ll_BFu31ll) C1{ Fi:31 Fi:31 FL:31 FL:31}



static void Test_BFu31i_BFu31i_BFs31ll_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu31i_BFs31ll_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu31i_BFs31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31i_BFs31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31i_BFs31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31i_BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFu31i_BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFu31i_BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFs31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFs31ll_BFu31ll, BFu31i_BFu31i_BFs31ll_BFu31ll)
//============================================================================


struct  BFu31i_BFu31i_BFu15i  {
  unsigned int v1:31;
  unsigned int v2:31;
  unsigned int v3:15;
};
//SIG(1 BFu31i_BFu31i_BFu15i) C1{ Fi:31 Fi:31 Fi:15}



static void Test_BFu31i_BFu31i_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu15i");
    static STRUCT_IF_C BFu31i_BFu31i_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu31i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31i_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu31i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu15i, BFu31i_BFu31i_BFu15i)
//============================================================================


struct  BFu31i_BFu31i_BFu15ll  {
  unsigned int v1:31;
  unsigned int v2:31;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_BFu31i_BFu15ll) C1{ Fi:31 Fi:31 FL:15}



static void Test_BFu31i_BFu31i_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu31i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, 1, "BFu31i_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, hide_ull(1LL<<14), "BFu31i_BFu31i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu15ll, BFu31i_BFu31i_BFu15ll)
//============================================================================


struct  BFu31i_BFu31i_BFu15s  {
  unsigned int v1:31;
  unsigned int v2:31;
  unsigned short v3:15;
};
//SIG(1 BFu31i_BFu31i_BFu15s) C1{ Fi:31 Fi:31 Fs:15}



static void Test_BFu31i_BFu31i_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu15s");
    static STRUCT_IF_C BFu31i_BFu31i_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu31i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31i_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu31i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu15s, BFu31i_BFu31i_BFu15s)
//============================================================================


struct  BFu31i_BFu31i_BFu16i  {
  unsigned int v1:31;
  unsigned int v2:31;
  unsigned int v3:16;
};
//SIG(1 BFu31i_BFu31i_BFu16i) C1{ Fi:31 Fi:31 Fi:16}



static void Test_BFu31i_BFu31i_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu16i");
    static STRUCT_IF_C BFu31i_BFu31i_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu31i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31i_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu31i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu16i, BFu31i_BFu31i_BFu16i)
//============================================================================


struct  BFu31i_BFu31i_BFu16ll  {
  unsigned int v1:31;
  unsigned int v2:31;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_BFu31i_BFu16ll) C1{ Fi:31 Fi:31 FL:16}



static void Test_BFu31i_BFu31i_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu31i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, 1, "BFu31i_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, hide_ull(1LL<<15), "BFu31i_BFu31i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu16ll, BFu31i_BFu31i_BFu16ll)
//============================================================================


struct  BFu31i_BFu31i_BFu16s  {
  unsigned int v1:31;
  unsigned int v2:31;
  unsigned short v3:16;
};
//SIG(1 BFu31i_BFu31i_BFu16s) C1{ Fi:31 Fi:31 Fs:16}



static void Test_BFu31i_BFu31i_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu16s");
    static STRUCT_IF_C BFu31i_BFu31i_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu31i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31i_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu31i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu16s, BFu31i_BFu31i_BFu16s)
//============================================================================


struct  BFu31i_BFu31i_BFu17i  {
  unsigned int v1:31;
  unsigned int v2:31;
  unsigned int v3:17;
};
//SIG(1 BFu31i_BFu31i_BFu17i) C1{ Fi:31 Fi:31 Fi:17}



static void Test_BFu31i_BFu31i_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu17i");
    static STRUCT_IF_C BFu31i_BFu31i_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu31i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31i_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu31i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu17i, BFu31i_BFu31i_BFu17i)
//============================================================================


struct  BFu31i_BFu31i_BFu17ll  {
  unsigned int v1:31;
  unsigned int v2:31;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_BFu31i_BFu17ll) C1{ Fi:31 Fi:31 FL:17}



static void Test_BFu31i_BFu31i_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu31i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, 1, "BFu31i_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, hide_ull(1LL<<16), "BFu31i_BFu31i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu17ll, BFu31i_BFu31i_BFu17ll)
//============================================================================


struct  BFu31i_BFu31i_BFu1c  {
  unsigned int v1:31;
  unsigned int v2:31;
  unsigned char v3:1;
};
//SIG(1 BFu31i_BFu31i_BFu1c) C1{ Fi:31 Fi:31 Fc:1}



static void Test_BFu31i_BFu31i_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu1c");
    static STRUCT_IF_C BFu31i_BFu31i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu31i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu1c");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu31i_BFu31i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu1c, BFu31i_BFu31i_BFu1c)
//============================================================================


struct  BFu31i_BFu31i_BFu1i  {
  unsigned int v1:31;
  unsigned int v2:31;
  unsigned int v3:1;
};
//SIG(1 BFu31i_BFu31i_BFu1i) C1{ Fi:31 Fi:31 Fi:1}



static void Test_BFu31i_BFu31i_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu1i");
    static STRUCT_IF_C BFu31i_BFu31i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu31i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu1i");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu31i_BFu31i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu1i, BFu31i_BFu31i_BFu1i)
//============================================================================


struct  BFu31i_BFu31i_BFu1ll  {
  unsigned int v1:31;
  unsigned int v2:31;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_BFu31i_BFu1ll) C1{ Fi:31 Fi:31 FL:1}



static void Test_BFu31i_BFu31i_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu31i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu31i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu1ll");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu31i_BFu31i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu1ll, BFu31i_BFu31i_BFu1ll)
//============================================================================


struct  BFu31i_BFu31i_BFu1s  {
  unsigned int v1:31;
  unsigned int v2:31;
  unsigned short v3:1;
};
//SIG(1 BFu31i_BFu31i_BFu1s) C1{ Fi:31 Fi:31 Fs:1}



static void Test_BFu31i_BFu31i_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu1s");
    static STRUCT_IF_C BFu31i_BFu31i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu31i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu1s");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu31i_BFu31i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu1s, BFu31i_BFu31i_BFu1s)
//============================================================================


struct  BFu31i_BFu31i_BFu31i  {
  unsigned int v1:31;
  unsigned int v2:31;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFu31i_BFu31i) C1{ Fi:31 Fi:31 Fi:31}



static void Test_BFu31i_BFu31i_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu31i");
    static STRUCT_IF_C BFu31i_BFu31i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu31i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu31i, BFu31i_BFu31i_BFu31i)
//============================================================================


struct  BFu31i_BFu31i_BFu31i_BFs31i  {
  unsigned int v1:31;
  unsigned int v2:31;
  unsigned int v3:31;
  signed int v4:31;
};
//SIG(1 BFu31i_BFu31i_BFu31i_BFs31i) C1{ Fi:31 Fi:31 Fi:31 Fi:31}



static void Test_BFu31i_BFu31i_BFu31i_BFs31i()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu31i_BFs31i");
    static STRUCT_IF_C BFu31i_BFu31i_BFu31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31i_BFu31i_BFs31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_BFu31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31i_BFu31i_BFu31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu31i_BFs31i, BFu31i_BFu31i_BFu31i_BFs31i)
//============================================================================


struct  BFu31i_BFu31i_BFu31i_BFs31ll  {
  unsigned int v1:31;
  unsigned int v2:31;
  unsigned int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31i_BFu31i_BFu31i_BFs31ll) C1{ Fi:31 Fi:31 Fi:31 FL:31}



static void Test_BFu31i_BFu31i_BFu31i_BFs31ll()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu31i_BFs31ll");
    static STRUCT_IF_C BFu31i_BFu31i_BFu31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31i_BFu31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31i_BFu31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31i_BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFu31i_BFu31i_BFu31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu31i_BFs31ll, BFu31i_BFu31i_BFu31i_BFs31ll)
//============================================================================


struct  BFu31i_BFu31i_BFu31i_BFu31i  {
  unsigned int v1:31;
  unsigned int v2:31;
  unsigned int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31i_BFu31i_BFu31i_BFu31i) C1{ Fi:31 Fi:31 Fi:31 Fi:31}



static void Test_BFu31i_BFu31i_BFu31i_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu31i_BFu31i");
    static STRUCT_IF_C BFu31i_BFu31i_BFu31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31i_BFu31i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu31i_BFu31i, BFu31i_BFu31i_BFu31i_BFu31i)
//============================================================================


struct  BFu31i_BFu31i_BFu31i_BFu31ll  {
  unsigned int v1:31;
  unsigned int v2:31;
  unsigned int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31i_BFu31i_BFu31i_BFu31ll) C1{ Fi:31 Fi:31 Fi:31 FL:31}



static void Test_BFu31i_BFu31i_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu31i_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu31i_BFu31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31i_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31i_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31i_BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu31i_BFu31ll, BFu31i_BFu31i_BFu31i_BFu31ll)
//============================================================================


struct  BFu31i_BFu31i_BFu31ll  {
  unsigned int v1:31;
  unsigned int v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFu31i_BFu31ll) C1{ Fi:31 Fi:31 FL:31}



static void Test_BFu31i_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu31i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu31ll, BFu31i_BFu31i_BFu31ll)
//============================================================================


struct  BFu31i_BFu31i_BFu31ll_BFs31i  {
  unsigned int v1:31;
  unsigned int v2:31;
  __tsu64 v3:31;
  signed int v4:31;
};
//SIG(1 BFu31i_BFu31i_BFu31ll_BFs31i) C1{ Fi:31 Fi:31 FL:31 Fi:31}



static void Test_BFu31i_BFu31i_BFu31ll_BFs31i()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu31ll_BFs31i");
    static STRUCT_IF_C BFu31i_BFu31i_BFu31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31i_BFu31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31i_BFu31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31i_BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31i_BFu31i_BFu31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu31ll_BFs31i, BFu31i_BFu31i_BFu31ll_BFs31i)
//============================================================================


struct  BFu31i_BFu31i_BFu31ll_BFs31ll  {
  unsigned int v1:31;
  unsigned int v2:31;
  __tsu64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31i_BFu31i_BFu31ll_BFs31ll) C1{ Fi:31 Fi:31 FL:31 FL:31}



static void Test_BFu31i_BFu31i_BFu31ll_BFs31ll()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu31ll_BFs31ll");
    static STRUCT_IF_C BFu31i_BFu31i_BFu31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31i_BFu31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31i_BFu31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31i_BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFu31i_BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_sll(1LL<<30), "BFu31i_BFu31i_BFu31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu31ll_BFs31ll, BFu31i_BFu31i_BFu31ll_BFs31ll)
//============================================================================


struct  BFu31i_BFu31i_BFu31ll_BFu31i  {
  unsigned int v1:31;
  unsigned int v2:31;
  __tsu64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31i_BFu31i_BFu31ll_BFu31i) C1{ Fi:31 Fi:31 FL:31 Fi:31}



static void Test_BFu31i_BFu31i_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu31ll_BFu31i");
    static STRUCT_IF_C BFu31i_BFu31i_BFu31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31i_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31i_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31i_BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu31ll_BFu31i, BFu31i_BFu31i_BFu31ll_BFu31i)
//============================================================================


struct  BFu31i_BFu31i_BFu31ll_BFu31ll  {
  unsigned int v1:31;
  unsigned int v2:31;
  __tsu64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31i_BFu31i_BFu31ll_BFu31ll) C1{ Fi:31 Fi:31 FL:31 FL:31}



static void Test_BFu31i_BFu31i_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu31i_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31i_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31i_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31i_BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFu31i_BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu31ll_BFu31ll, BFu31i_BFu31i_BFu31ll_BFu31ll)
//============================================================================


struct  BFu31i_BFu31i_BFu32i  {
  unsigned int v1:31;
  unsigned int v2:31;
  unsigned int v3:32;
};
//SIG(1 BFu31i_BFu31i_BFu32i) C1{ Fi:31 Fi:31 Fi:32}



static void Test_BFu31i_BFu31i_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu32i");
    static STRUCT_IF_C BFu31i_BFu31i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu31i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu31i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu32i, BFu31i_BFu31i_BFu32i)
//============================================================================


struct  BFu31i_BFu31i_BFu32ll  {
  unsigned int v1:31;
  unsigned int v2:31;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_BFu31i_BFu32ll) C1{ Fi:31 Fi:31 FL:32}



static void Test_BFu31i_BFu31i_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu31i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, 1, "BFu31i_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu31i_BFu31i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu32ll, BFu31i_BFu31i_BFu32ll)
//============================================================================


struct  BFu31i_BFu31i_BFu33  {
  unsigned int v1:31;
  unsigned int v2:31;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_BFu31i_BFu33) C1{ Fi:31 Fi:31 FL:33}



static void Test_BFu31i_BFu31i_BFu33()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu33");
    static STRUCT_IF_C BFu31i_BFu31i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, 1, "BFu31i_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu31i_BFu31i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu33, BFu31i_BFu31i_BFu33)
//============================================================================


struct  BFu31i_BFu31i_BFu7c  {
  unsigned int v1:31;
  unsigned int v2:31;
  unsigned char v3:7;
};
//SIG(1 BFu31i_BFu31i_BFu7c) C1{ Fi:31 Fi:31 Fc:7}



static void Test_BFu31i_BFu31i_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu7c");
    static STRUCT_IF_C BFu31i_BFu31i_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu31i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu31i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu7c, BFu31i_BFu31i_BFu7c)
//============================================================================


struct  BFu31i_BFu31i_BFu7i  {
  unsigned int v1:31;
  unsigned int v2:31;
  unsigned int v3:7;
};
//SIG(1 BFu31i_BFu31i_BFu7i) C1{ Fi:31 Fi:31 Fi:7}



static void Test_BFu31i_BFu31i_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu7i");
    static STRUCT_IF_C BFu31i_BFu31i_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu31i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu31i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu7i, BFu31i_BFu31i_BFu7i)
//============================================================================


struct  BFu31i_BFu31i_BFu7ll  {
  unsigned int v1:31;
  unsigned int v2:31;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_BFu31i_BFu7ll) C1{ Fi:31 Fi:31 FL:7}



static void Test_BFu31i_BFu31i_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu31i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, 1, "BFu31i_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, hide_ull(1LL<<6), "BFu31i_BFu31i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu7ll, BFu31i_BFu31i_BFu7ll)
//============================================================================


struct  BFu31i_BFu31i_BFu7s  {
  unsigned int v1:31;
  unsigned int v2:31;
  unsigned short v3:7;
};
//SIG(1 BFu31i_BFu31i_BFu7s) C1{ Fi:31 Fi:31 Fs:7}



static void Test_BFu31i_BFu31i_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu7s");
    static STRUCT_IF_C BFu31i_BFu31i_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu31i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu31i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu7s, BFu31i_BFu31i_BFu7s)
//============================================================================


struct  BFu31i_BFu31i_BFu8c  {
  unsigned int v1:31;
  unsigned int v2:31;
  unsigned char v3:8;
};
//SIG(1 BFu31i_BFu31i_BFu8c) C1{ Fi:31 Fi:31 Fc:8}



static void Test_BFu31i_BFu31i_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu8c");
    static STRUCT_IF_C BFu31i_BFu31i_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu31i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu31i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu8c, BFu31i_BFu31i_BFu8c)
//============================================================================


struct  BFu31i_BFu31i_BFu8i  {
  unsigned int v1:31;
  unsigned int v2:31;
  unsigned int v3:8;
};
//SIG(1 BFu31i_BFu31i_BFu8i) C1{ Fi:31 Fi:31 Fi:8}



static void Test_BFu31i_BFu31i_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu8i");
    static STRUCT_IF_C BFu31i_BFu31i_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu31i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu31i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu8i, BFu31i_BFu31i_BFu8i)
//============================================================================


struct  BFu31i_BFu31i_BFu8ll  {
  unsigned int v1:31;
  unsigned int v2:31;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_BFu31i_BFu8ll) C1{ Fi:31 Fi:31 FL:8}



static void Test_BFu31i_BFu31i_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu31i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, 1, "BFu31i_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, hide_ull(1LL<<7), "BFu31i_BFu31i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu8ll, BFu31i_BFu31i_BFu8ll)
//============================================================================


struct  BFu31i_BFu31i_BFu8s  {
  unsigned int v1:31;
  unsigned int v2:31;
  unsigned short v3:8;
};
//SIG(1 BFu31i_BFu31i_BFu8s) C1{ Fi:31 Fi:31 Fs:8}



static void Test_BFu31i_BFu31i_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu8s");
    static STRUCT_IF_C BFu31i_BFu31i_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu31i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu31i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu8s, BFu31i_BFu31i_BFu8s)
//============================================================================


struct  BFu31i_BFu31i_BFu9i  {
  unsigned int v1:31;
  unsigned int v2:31;
  unsigned int v3:9;
};
//SIG(1 BFu31i_BFu31i_BFu9i) C1{ Fi:31 Fi:31 Fi:9}



static void Test_BFu31i_BFu31i_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu9i");
    static STRUCT_IF_C BFu31i_BFu31i_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu31i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31i_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu31i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu9i, BFu31i_BFu31i_BFu9i)
//============================================================================


struct  BFu31i_BFu31i_BFu9ll  {
  unsigned int v1:31;
  unsigned int v2:31;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_BFu31i_BFu9ll) C1{ Fi:31 Fi:31 FL:9}



static void Test_BFu31i_BFu31i_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu31i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, 1, "BFu31i_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, hide_ull(1LL<<8), "BFu31i_BFu31i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu9ll, BFu31i_BFu31i_BFu9ll)
//============================================================================


struct  BFu31i_BFu31i_BFu9s  {
  unsigned int v1:31;
  unsigned int v2:31;
  unsigned short v3:9;
};
//SIG(1 BFu31i_BFu31i_BFu9s) C1{ Fi:31 Fi:31 Fs:9}



static void Test_BFu31i_BFu31i_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu31i_BFu9s");
    static STRUCT_IF_C BFu31i_BFu31i_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu31i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31i_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu31i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_BFu9s, BFu31i_BFu31i_BFu9s)
//============================================================================


struct  BFu31i_BFu31i_C  {
  unsigned int v1:31;
  unsigned int v2:31;
  char v3;
};
//SIG(1 BFu31i_BFu31i_C) C1{ Fi:31 Fi:31 Fc}



static void Test_BFu31i_BFu31i_C()
{
  {
    init_simple_test("BFu31i_BFu31i_C");
    static STRUCT_IF_C BFu31i_BFu31i_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu31i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_C");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_C");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_C");
    check_field_offset(lv, v3, 8, "BFu31i_BFu31i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_C, BFu31i_BFu31i_C)
//============================================================================


struct  BFu31i_BFu31i_D  {
  unsigned int v1:31;
  unsigned int v2:31;
  double v3;
};
//SIG(1 BFu31i_BFu31i_D) C1{ Fi:31 Fi:31 FL}



static void Test_BFu31i_BFu31i_D()
{
  {
    init_simple_test("BFu31i_BFu31i_D");
    static STRUCT_IF_C BFu31i_BFu31i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31i_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_D");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_D");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_D");
    check_field_offset(lv, v3, 8, "BFu31i_BFu31i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_D, BFu31i_BFu31i_D)
//============================================================================


struct  BFu31i_BFu31i_F  {
  unsigned int v1:31;
  unsigned int v2:31;
  float v3;
};
//SIG(1 BFu31i_BFu31i_F) C1{ Fi:31 Fi:31 Fi}



static void Test_BFu31i_BFu31i_F()
{
  {
    init_simple_test("BFu31i_BFu31i_F");
    static STRUCT_IF_C BFu31i_BFu31i_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu31i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_F");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_F");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_F");
    check_field_offset(lv, v3, 8, "BFu31i_BFu31i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_F, BFu31i_BFu31i_F)
//============================================================================


struct  BFu31i_BFu31i_I  {
  unsigned int v1:31;
  unsigned int v2:31;
  int v3;
};
//SIG(1 BFu31i_BFu31i_I) C1{ Fi:31 Fi:31 Fi}



static void Test_BFu31i_BFu31i_I()
{
  {
    init_simple_test("BFu31i_BFu31i_I");
    static STRUCT_IF_C BFu31i_BFu31i_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu31i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_I");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_I");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_I");
    check_field_offset(lv, v3, 8, "BFu31i_BFu31i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_I, BFu31i_BFu31i_I)
//============================================================================


struct  BFu31i_BFu31i_Ip  {
  unsigned int v1:31;
  unsigned int v2:31;
  int *v3;
};
//SIG(1 BFu31i_BFu31i_Ip) C1{ Fi:31 Fi:31 Fp}



static void Test_BFu31i_BFu31i_Ip()
{
  {
    init_simple_test("BFu31i_BFu31i_Ip");
    static STRUCT_IF_C BFu31i_BFu31i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_Ip");
    check_field_offset(lv, v3, 8, "BFu31i_BFu31i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_Ip, BFu31i_BFu31i_Ip)
//============================================================================


struct  BFu31i_BFu31i_L  {
  unsigned int v1:31;
  unsigned int v2:31;
  __tsi64 v3;
};
//SIG(1 BFu31i_BFu31i_L) C1{ Fi:31 Fi:31 FL}



static void Test_BFu31i_BFu31i_L()
{
  {
    init_simple_test("BFu31i_BFu31i_L");
    static STRUCT_IF_C BFu31i_BFu31i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31i_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_L");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_L");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_L");
    check_field_offset(lv, v3, 8, "BFu31i_BFu31i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_L, BFu31i_BFu31i_L)
//============================================================================


struct  BFu31i_BFu31i_S  {
  unsigned int v1:31;
  unsigned int v2:31;
  short v3;
};
//SIG(1 BFu31i_BFu31i_S) C1{ Fi:31 Fi:31 Fs}



static void Test_BFu31i_BFu31i_S()
{
  {
    init_simple_test("BFu31i_BFu31i_S");
    static STRUCT_IF_C BFu31i_BFu31i_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu31i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_S");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_S");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_S");
    check_field_offset(lv, v3, 8, "BFu31i_BFu31i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_S, BFu31i_BFu31i_S)
//============================================================================


struct  BFu31i_BFu31i_Uc  {
  unsigned int v1:31;
  unsigned int v2:31;
  unsigned char v3;
};
//SIG(1 BFu31i_BFu31i_Uc) C1{ Fi:31 Fi:31 Fc}



static void Test_BFu31i_BFu31i_Uc()
{
  {
    init_simple_test("BFu31i_BFu31i_Uc");
    static STRUCT_IF_C BFu31i_BFu31i_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu31i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_Uc");
    check_field_offset(lv, v3, 8, "BFu31i_BFu31i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_Uc, BFu31i_BFu31i_Uc)
//============================================================================


struct  BFu31i_BFu31i_Ui  {
  unsigned int v1:31;
  unsigned int v2:31;
  unsigned int v3;
};
//SIG(1 BFu31i_BFu31i_Ui) C1{ Fi:31 Fi:31 Fi}



static void Test_BFu31i_BFu31i_Ui()
{
  {
    init_simple_test("BFu31i_BFu31i_Ui");
    static STRUCT_IF_C BFu31i_BFu31i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu31i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_Ui");
    check_field_offset(lv, v3, 8, "BFu31i_BFu31i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_Ui, BFu31i_BFu31i_Ui)
//============================================================================


struct  BFu31i_BFu31i_Ul  {
  unsigned int v1:31;
  unsigned int v2:31;
  __tsu64 v3;
};
//SIG(1 BFu31i_BFu31i_Ul) C1{ Fi:31 Fi:31 FL}



static void Test_BFu31i_BFu31i_Ul()
{
  {
    init_simple_test("BFu31i_BFu31i_Ul");
    static STRUCT_IF_C BFu31i_BFu31i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_Ul");
    check_field_offset(lv, v3, 8, "BFu31i_BFu31i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_Ul, BFu31i_BFu31i_Ul)
//============================================================================


struct  BFu31i_BFu31i_Us  {
  unsigned int v1:31;
  unsigned int v2:31;
  unsigned short v3;
};
//SIG(1 BFu31i_BFu31i_Us) C1{ Fi:31 Fi:31 Fs}



static void Test_BFu31i_BFu31i_Us()
{
  {
    init_simple_test("BFu31i_BFu31i_Us");
    static STRUCT_IF_C BFu31i_BFu31i_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu31i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_Us");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_Us");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_Us");
    check_field_offset(lv, v3, 8, "BFu31i_BFu31i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_Us, BFu31i_BFu31i_Us)
//============================================================================


struct  BFu31i_BFu31i_Vp  {
  unsigned int v1:31;
  unsigned int v2:31;
  void *v3;
};
//SIG(1 BFu31i_BFu31i_Vp) C1{ Fi:31 Fi:31 Fp}



static void Test_BFu31i_BFu31i_Vp()
{
  {
    init_simple_test("BFu31i_BFu31i_Vp");
    static STRUCT_IF_C BFu31i_BFu31i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_Vp");
    check_field_offset(lv, v3, 8, "BFu31i_BFu31i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31i_Vp, BFu31i_BFu31i_Vp)
//============================================================================


struct  BFu31i_BFu31ll  {
  unsigned int v1:31;
  __tsu64 v2:31;
};
//SIG(1 BFu31i_BFu31ll) C1{ Fi:31 FL:31}



static void Test_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll, BFu31i_BFu31ll)
//============================================================================


struct  BFu31i_BFu31ll_BFs31i  {
  unsigned int v1:31;
  __tsu64 v2:31;
  signed int v3:31;
};
//SIG(1 BFu31i_BFu31ll_BFs31i) C1{ Fi:31 FL:31 Fi:31}



static void Test_BFu31i_BFu31ll_BFs31i()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFs31i");
    static STRUCT_IF_C BFu31i_BFu31ll_BFs31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31i_BFu31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFs31i, BFu31i_BFu31ll_BFs31i)
//============================================================================


struct  BFu31i_BFu31ll_BFs31i_BFs31i  {
  unsigned int v1:31;
  __tsu64 v2:31;
  signed int v3:31;
  signed int v4:31;
};
//SIG(1 BFu31i_BFu31ll_BFs31i_BFs31i) C1{ Fi:31 FL:31 Fi:31 Fi:31}



static void Test_BFu31i_BFu31ll_BFs31i_BFs31i()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFs31i_BFs31i");
    static STRUCT_IF_C BFu31i_BFu31ll_BFs31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31ll_BFs31i_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFs31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31i_BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31i_BFu31ll_BFs31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFs31i_BFs31i, BFu31i_BFu31ll_BFs31i_BFs31i)
//============================================================================


struct  BFu31i_BFu31ll_BFs31i_BFs31ll  {
  unsigned int v1:31;
  __tsu64 v2:31;
  signed int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31i_BFu31ll_BFs31i_BFs31ll) C1{ Fi:31 FL:31 Fi:31 FL:31}



static void Test_BFu31i_BFu31ll_BFs31i_BFs31ll()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFs31i_BFs31ll");
    static STRUCT_IF_C BFu31i_BFu31ll_BFs31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31ll_BFs31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFs31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31i_BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31i_BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFu31i_BFu31ll_BFs31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFs31i_BFs31ll, BFu31i_BFu31ll_BFs31i_BFs31ll)
//============================================================================


struct  BFu31i_BFu31ll_BFs31i_BFu31i  {
  unsigned int v1:31;
  __tsu64 v2:31;
  signed int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31i_BFu31ll_BFs31i_BFu31i) C1{ Fi:31 FL:31 Fi:31 Fi:31}



static void Test_BFu31i_BFu31ll_BFs31i_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFs31i_BFu31i");
    static STRUCT_IF_C BFu31i_BFu31ll_BFs31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31ll_BFs31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFs31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31i_BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFs31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFs31i_BFu31i, BFu31i_BFu31ll_BFs31i_BFu31i)
//============================================================================


struct  BFu31i_BFu31ll_BFs31i_BFu31ll  {
  unsigned int v1:31;
  __tsu64 v2:31;
  signed int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31i_BFu31ll_BFs31i_BFu31ll) C1{ Fi:31 FL:31 Fi:31 FL:31}



static void Test_BFu31i_BFu31ll_BFs31i_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFs31i_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu31ll_BFs31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31ll_BFs31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFs31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31i_BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31i_BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFs31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFs31i_BFu31ll, BFu31i_BFu31ll_BFs31i_BFu31ll)
//============================================================================


struct  BFu31i_BFu31ll_BFs31ll  {
  unsigned int v1:31;
  __tsu64 v2:31;
  signed __tsi64 v3:31;
};
//SIG(1 BFu31i_BFu31ll_BFs31ll) C1{ Fi:31 FL:31 FL:31}



static void Test_BFu31i_BFu31ll_BFs31ll()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFs31ll");
    static STRUCT_IF_C BFu31i_BFu31ll_BFs31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFu31i_BFu31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFs31ll, BFu31i_BFu31ll_BFs31ll)
//============================================================================


struct  BFu31i_BFu31ll_BFs31ll_BFs31i  {
  unsigned int v1:31;
  __tsu64 v2:31;
  signed __tsi64 v3:31;
  signed int v4:31;
};
//SIG(1 BFu31i_BFu31ll_BFs31ll_BFs31i) C1{ Fi:31 FL:31 FL:31 Fi:31}



static void Test_BFu31i_BFu31ll_BFs31ll_BFs31i()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFs31ll_BFs31i");
    static STRUCT_IF_C BFu31i_BFu31ll_BFs31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31ll_BFs31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFs31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31i_BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFu31i_BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31i_BFu31ll_BFs31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFs31ll_BFs31i, BFu31i_BFu31ll_BFs31ll_BFs31i)
//============================================================================


struct  BFu31i_BFu31ll_BFs31ll_BFs31ll  {
  unsigned int v1:31;
  __tsu64 v2:31;
  signed __tsi64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31i_BFu31ll_BFs31ll_BFs31ll) C1{ Fi:31 FL:31 FL:31 FL:31}



static void Test_BFu31i_BFu31ll_BFs31ll_BFs31ll()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFs31ll_BFs31ll");
    static STRUCT_IF_C BFu31i_BFu31ll_BFs31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31ll_BFs31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFs31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31i_BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFu31i_BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFu31i_BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_sll(1LL<<30), "BFu31i_BFu31ll_BFs31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFs31ll_BFs31ll, BFu31i_BFu31ll_BFs31ll_BFs31ll)
//============================================================================


struct  BFu31i_BFu31ll_BFs31ll_BFu31i  {
  unsigned int v1:31;
  __tsu64 v2:31;
  signed __tsi64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31i_BFu31ll_BFs31ll_BFu31i) C1{ Fi:31 FL:31 FL:31 Fi:31}



static void Test_BFu31i_BFu31ll_BFs31ll_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFs31ll_BFu31i");
    static STRUCT_IF_C BFu31i_BFu31ll_BFs31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31ll_BFs31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFs31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31i_BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFu31i_BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFs31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFs31ll_BFu31i, BFu31i_BFu31ll_BFs31ll_BFu31i)
//============================================================================


struct  BFu31i_BFu31ll_BFs31ll_BFu31ll  {
  unsigned int v1:31;
  __tsu64 v2:31;
  signed __tsi64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31i_BFu31ll_BFs31ll_BFu31ll) C1{ Fi:31 FL:31 FL:31 FL:31}



static void Test_BFu31i_BFu31ll_BFs31ll_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFs31ll_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu31ll_BFs31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31ll_BFs31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFs31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31i_BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFu31i_BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFu31i_BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFs31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFs31ll_BFu31ll, BFu31i_BFu31ll_BFs31ll_BFu31ll)
//============================================================================


struct  BFu31i_BFu31ll_BFu15i  {
  unsigned int v1:31;
  __tsu64 v2:31;
  unsigned int v3:15;
};
//SIG(1 BFu31i_BFu31ll_BFu15i) C1{ Fi:31 FL:31 Fi:15}



static void Test_BFu31i_BFu31ll_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu15i");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31i_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu31ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu15i, BFu31i_BFu31ll_BFu15i)
//============================================================================


struct  BFu31i_BFu31ll_BFu15ll  {
  unsigned int v1:31;
  __tsu64 v2:31;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_BFu31ll_BFu15ll) C1{ Fi:31 FL:31 FL:15}



static void Test_BFu31i_BFu31ll_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 15, 1, "BFu31i_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 15, hide_ull(1LL<<14), "BFu31i_BFu31ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu15ll, BFu31i_BFu31ll_BFu15ll)
//============================================================================


struct  BFu31i_BFu31ll_BFu15s  {
  unsigned int v1:31;
  __tsu64 v2:31;
  unsigned short v3:15;
};
//SIG(1 BFu31i_BFu31ll_BFu15s) C1{ Fi:31 FL:31 Fs:15}



static void Test_BFu31i_BFu31ll_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu15s");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31i_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu31ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu15s, BFu31i_BFu31ll_BFu15s)
//============================================================================


struct  BFu31i_BFu31ll_BFu16i  {
  unsigned int v1:31;
  __tsu64 v2:31;
  unsigned int v3:16;
};
//SIG(1 BFu31i_BFu31ll_BFu16i) C1{ Fi:31 FL:31 Fi:16}



static void Test_BFu31i_BFu31ll_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu16i");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31i_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu31ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu16i, BFu31i_BFu31ll_BFu16i)
//============================================================================


struct  BFu31i_BFu31ll_BFu16ll  {
  unsigned int v1:31;
  __tsu64 v2:31;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_BFu31ll_BFu16ll) C1{ Fi:31 FL:31 FL:16}



static void Test_BFu31i_BFu31ll_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 16, 1, "BFu31i_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 16, hide_ull(1LL<<15), "BFu31i_BFu31ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu16ll, BFu31i_BFu31ll_BFu16ll)
//============================================================================


struct  BFu31i_BFu31ll_BFu16s  {
  unsigned int v1:31;
  __tsu64 v2:31;
  unsigned short v3:16;
};
//SIG(1 BFu31i_BFu31ll_BFu16s) C1{ Fi:31 FL:31 Fs:16}



static void Test_BFu31i_BFu31ll_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu16s");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31i_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu31ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu16s, BFu31i_BFu31ll_BFu16s)
//============================================================================


struct  BFu31i_BFu31ll_BFu17i  {
  unsigned int v1:31;
  __tsu64 v2:31;
  unsigned int v3:17;
};
//SIG(1 BFu31i_BFu31ll_BFu17i) C1{ Fi:31 FL:31 Fi:17}



static void Test_BFu31i_BFu31ll_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu17i");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31i_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu31ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu17i, BFu31i_BFu31ll_BFu17i)
//============================================================================


struct  BFu31i_BFu31ll_BFu17ll  {
  unsigned int v1:31;
  __tsu64 v2:31;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_BFu31ll_BFu17ll) C1{ Fi:31 FL:31 FL:17}



static void Test_BFu31i_BFu31ll_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 17, 1, "BFu31i_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 17, hide_ull(1LL<<16), "BFu31i_BFu31ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu17ll, BFu31i_BFu31ll_BFu17ll)
//============================================================================


struct  BFu31i_BFu31ll_BFu1c  {
  unsigned int v1:31;
  __tsu64 v2:31;
  unsigned char v3:1;
};
//SIG(1 BFu31i_BFu31ll_BFu1c) C1{ Fi:31 FL:31 Fc:1}



static void Test_BFu31i_BFu31ll_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu1c");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu31ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu1c");
    set_bf_and_test(lv, v3, 7, 6, 1, 1, "BFu31i_BFu31ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu1c, BFu31i_BFu31ll_BFu1c)
//============================================================================


struct  BFu31i_BFu31ll_BFu1i  {
  unsigned int v1:31;
  __tsu64 v2:31;
  unsigned int v3:1;
};
//SIG(1 BFu31i_BFu31ll_BFu1i) C1{ Fi:31 FL:31 Fi:1}



static void Test_BFu31i_BFu31ll_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu1i");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu31ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu1i");
    set_bf_and_test(lv, v3, 7, 6, 1, 1, "BFu31i_BFu31ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu1i, BFu31i_BFu31ll_BFu1i)
//============================================================================


struct  BFu31i_BFu31ll_BFu1ll  {
  unsigned int v1:31;
  __tsu64 v2:31;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_BFu31ll_BFu1ll) C1{ Fi:31 FL:31 FL:1}



static void Test_BFu31i_BFu31ll_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu31ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v3, 7, 6, 1, 1, "BFu31i_BFu31ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu1ll, BFu31i_BFu31ll_BFu1ll)
//============================================================================


struct  BFu31i_BFu31ll_BFu1s  {
  unsigned int v1:31;
  __tsu64 v2:31;
  unsigned short v3:1;
};
//SIG(1 BFu31i_BFu31ll_BFu1s) C1{ Fi:31 FL:31 Fs:1}



static void Test_BFu31i_BFu31ll_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu1s");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu31ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu1s");
    set_bf_and_test(lv, v3, 7, 6, 1, 1, "BFu31i_BFu31ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu1s, BFu31i_BFu31ll_BFu1s)
//============================================================================


struct  BFu31i_BFu31ll_BFu31i  {
  unsigned int v1:31;
  __tsu64 v2:31;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFu31ll_BFu31i) C1{ Fi:31 FL:31 Fi:31}



static void Test_BFu31i_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu31i");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu31i, BFu31i_BFu31ll_BFu31i)
//============================================================================


struct  BFu31i_BFu31ll_BFu31i_BFs31i  {
  unsigned int v1:31;
  __tsu64 v2:31;
  unsigned int v3:31;
  signed int v4:31;
};
//SIG(1 BFu31i_BFu31ll_BFu31i_BFs31i) C1{ Fi:31 FL:31 Fi:31 Fi:31}



static void Test_BFu31i_BFu31ll_BFu31i_BFs31i()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu31i_BFs31i");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31ll_BFu31i_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31i_BFu31ll_BFu31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu31i_BFs31i, BFu31i_BFu31ll_BFu31i_BFs31i)
//============================================================================


struct  BFu31i_BFu31ll_BFu31i_BFs31ll  {
  unsigned int v1:31;
  __tsu64 v2:31;
  unsigned int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31i_BFu31ll_BFu31i_BFs31ll) C1{ Fi:31 FL:31 Fi:31 FL:31}



static void Test_BFu31i_BFu31ll_BFu31i_BFs31ll()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu31i_BFs31ll");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31ll_BFu31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31i_BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFu31i_BFu31ll_BFu31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu31i_BFs31ll, BFu31i_BFu31ll_BFu31i_BFs31ll)
//============================================================================


struct  BFu31i_BFu31ll_BFu31i_BFu31i  {
  unsigned int v1:31;
  __tsu64 v2:31;
  unsigned int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31i_BFu31ll_BFu31i_BFu31i) C1{ Fi:31 FL:31 Fi:31 Fi:31}



static void Test_BFu31i_BFu31ll_BFu31i_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu31i_BFu31i");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31ll_BFu31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu31i_BFu31i, BFu31i_BFu31ll_BFu31i_BFu31i)
//============================================================================


struct  BFu31i_BFu31ll_BFu31i_BFu31ll  {
  unsigned int v1:31;
  __tsu64 v2:31;
  unsigned int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31i_BFu31ll_BFu31i_BFu31ll) C1{ Fi:31 FL:31 Fi:31 FL:31}



static void Test_BFu31i_BFu31ll_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu31i_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31ll_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31i_BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu31i_BFu31ll, BFu31i_BFu31ll_BFu31i_BFu31ll)
//============================================================================


struct  BFu31i_BFu31ll_BFu31ll  {
  unsigned int v1:31;
  __tsu64 v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFu31ll_BFu31ll) C1{ Fi:31 FL:31 FL:31}



static void Test_BFu31i_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu31ll, BFu31i_BFu31ll_BFu31ll)
//============================================================================


struct  BFu31i_BFu31ll_BFu31ll_BFs31i  {
  unsigned int v1:31;
  __tsu64 v2:31;
  __tsu64 v3:31;
  signed int v4:31;
};
//SIG(1 BFu31i_BFu31ll_BFu31ll_BFs31i) C1{ Fi:31 FL:31 FL:31 Fi:31}



static void Test_BFu31i_BFu31ll_BFu31ll_BFs31i()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu31ll_BFs31i");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31ll_BFu31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31i_BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31i_BFu31ll_BFu31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu31ll_BFs31i, BFu31i_BFu31ll_BFu31ll_BFs31i)
//============================================================================


struct  BFu31i_BFu31ll_BFu31ll_BFs31ll  {
  unsigned int v1:31;
  __tsu64 v2:31;
  __tsu64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31i_BFu31ll_BFu31ll_BFs31ll) C1{ Fi:31 FL:31 FL:31 FL:31}



static void Test_BFu31i_BFu31ll_BFu31ll_BFs31ll()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu31ll_BFs31ll");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31ll_BFu31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31i_BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFu31i_BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_sll(1LL<<30), "BFu31i_BFu31ll_BFu31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu31ll_BFs31ll, BFu31i_BFu31ll_BFu31ll_BFs31ll)
//============================================================================


struct  BFu31i_BFu31ll_BFu31ll_BFu31i  {
  unsigned int v1:31;
  __tsu64 v2:31;
  __tsu64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31i_BFu31ll_BFu31ll_BFu31i) C1{ Fi:31 FL:31 FL:31 Fi:31}



static void Test_BFu31i_BFu31ll_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu31ll_BFu31i");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31ll_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31i_BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31i_BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu31ll_BFu31i, BFu31i_BFu31ll_BFu31ll_BFu31i)
//============================================================================


struct  BFu31i_BFu31ll_BFu31ll_BFu31ll  {
  unsigned int v1:31;
  __tsu64 v2:31;
  __tsu64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31i_BFu31ll_BFu31ll_BFu31ll) C1{ Fi:31 FL:31 FL:31 FL:31}



static void Test_BFu31i_BFu31ll_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31ll_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31i_BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFu31i_BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu31ll_BFu31ll, BFu31i_BFu31ll_BFu31ll_BFu31ll)
//============================================================================


struct  BFu31i_BFu31ll_BFu32i  {
  unsigned int v1:31;
  __tsu64 v2:31;
  unsigned int v3:32;
};
//SIG(1 BFu31i_BFu31ll_BFu32i) C1{ Fi:31 FL:31 Fi:32}



static void Test_BFu31i_BFu31ll_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu32i");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu31ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu32i, BFu31i_BFu31ll_BFu32i)
//============================================================================


struct  BFu31i_BFu31ll_BFu32ll  {
  unsigned int v1:31;
  __tsu64 v2:31;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_BFu31ll_BFu32ll) C1{ Fi:31 FL:31 FL:32}



static void Test_BFu31i_BFu31ll_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 32, 1, "BFu31i_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 32, hide_ull(1LL<<31), "BFu31i_BFu31ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu32ll, BFu31i_BFu31ll_BFu32ll)
//============================================================================


struct  BFu31i_BFu31ll_BFu33  {
  unsigned int v1:31;
  __tsu64 v2:31;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_BFu31ll_BFu33) C1{ Fi:31 FL:31 FL:33}



static void Test_BFu31i_BFu31ll_BFu33()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu33");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 33, 1, "BFu31i_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 33, hide_ull(1LL<<32), "BFu31i_BFu31ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu33, BFu31i_BFu31ll_BFu33)
//============================================================================


struct  BFu31i_BFu31ll_BFu7c  {
  unsigned int v1:31;
  __tsu64 v2:31;
  unsigned char v3:7;
};
//SIG(1 BFu31i_BFu31ll_BFu7c) C1{ Fi:31 FL:31 Fc:7}



static void Test_BFu31i_BFu31ll_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu7c");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu31ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu7c, BFu31i_BFu31ll_BFu7c)
//============================================================================


struct  BFu31i_BFu31ll_BFu7i  {
  unsigned int v1:31;
  __tsu64 v2:31;
  unsigned int v3:7;
};
//SIG(1 BFu31i_BFu31ll_BFu7i) C1{ Fi:31 FL:31 Fi:7}



static void Test_BFu31i_BFu31ll_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu7i");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu31ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu7i, BFu31i_BFu31ll_BFu7i)
//============================================================================


struct  BFu31i_BFu31ll_BFu7ll  {
  unsigned int v1:31;
  __tsu64 v2:31;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_BFu31ll_BFu7ll) C1{ Fi:31 FL:31 FL:7}



static void Test_BFu31i_BFu31ll_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 7, 1, "BFu31i_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 7, hide_ull(1LL<<6), "BFu31i_BFu31ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu7ll, BFu31i_BFu31ll_BFu7ll)
//============================================================================


struct  BFu31i_BFu31ll_BFu7s  {
  unsigned int v1:31;
  __tsu64 v2:31;
  unsigned short v3:7;
};
//SIG(1 BFu31i_BFu31ll_BFu7s) C1{ Fi:31 FL:31 Fs:7}



static void Test_BFu31i_BFu31ll_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu7s");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu31ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu7s, BFu31i_BFu31ll_BFu7s)
//============================================================================


struct  BFu31i_BFu31ll_BFu8c  {
  unsigned int v1:31;
  __tsu64 v2:31;
  unsigned char v3:8;
};
//SIG(1 BFu31i_BFu31ll_BFu8c) C1{ Fi:31 FL:31 Fc:8}



static void Test_BFu31i_BFu31ll_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu8c");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu31ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu8c, BFu31i_BFu31ll_BFu8c)
//============================================================================


struct  BFu31i_BFu31ll_BFu8i  {
  unsigned int v1:31;
  __tsu64 v2:31;
  unsigned int v3:8;
};
//SIG(1 BFu31i_BFu31ll_BFu8i) C1{ Fi:31 FL:31 Fi:8}



static void Test_BFu31i_BFu31ll_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu8i");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu31ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu8i, BFu31i_BFu31ll_BFu8i)
//============================================================================


struct  BFu31i_BFu31ll_BFu8ll  {
  unsigned int v1:31;
  __tsu64 v2:31;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_BFu31ll_BFu8ll) C1{ Fi:31 FL:31 FL:8}



static void Test_BFu31i_BFu31ll_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 8, 1, "BFu31i_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 8, hide_ull(1LL<<7), "BFu31i_BFu31ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu8ll, BFu31i_BFu31ll_BFu8ll)
//============================================================================


struct  BFu31i_BFu31ll_BFu8s  {
  unsigned int v1:31;
  __tsu64 v2:31;
  unsigned short v3:8;
};
//SIG(1 BFu31i_BFu31ll_BFu8s) C1{ Fi:31 FL:31 Fs:8}



static void Test_BFu31i_BFu31ll_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu8s");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu31ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu8s, BFu31i_BFu31ll_BFu8s)
//============================================================================


struct  BFu31i_BFu31ll_BFu9i  {
  unsigned int v1:31;
  __tsu64 v2:31;
  unsigned int v3:9;
};
//SIG(1 BFu31i_BFu31ll_BFu9i) C1{ Fi:31 FL:31 Fi:9}



static void Test_BFu31i_BFu31ll_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu9i");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31i_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu31ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu9i, BFu31i_BFu31ll_BFu9i)
//============================================================================


struct  BFu31i_BFu31ll_BFu9ll  {
  unsigned int v1:31;
  __tsu64 v2:31;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_BFu31ll_BFu9ll) C1{ Fi:31 FL:31 FL:9}



static void Test_BFu31i_BFu31ll_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 9, 1, "BFu31i_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 9, hide_ull(1LL<<8), "BFu31i_BFu31ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu9ll, BFu31i_BFu31ll_BFu9ll)
//============================================================================


struct  BFu31i_BFu31ll_BFu9s  {
  unsigned int v1:31;
  __tsu64 v2:31;
  unsigned short v3:9;
};
//SIG(1 BFu31i_BFu31ll_BFu9s) C1{ Fi:31 FL:31 Fs:9}



static void Test_BFu31i_BFu31ll_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu31ll_BFu9s");
    static STRUCT_IF_C BFu31i_BFu31ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31i_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu31ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_BFu9s, BFu31i_BFu31ll_BFu9s)
//============================================================================


struct  BFu31i_BFu31ll_C  {
  unsigned int v1:31;
  __tsu64 v2:31;
  char v3;
};
//SIG(1 BFu31i_BFu31ll_C) C1{ Fi:31 FL:31 Fc}



static void Test_BFu31i_BFu31ll_C()
{
  {
    init_simple_test("BFu31i_BFu31ll_C");
    static STRUCT_IF_C BFu31i_BFu31ll_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_C");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_C");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_C");
    check_field_offset(lv, v3, 8, "BFu31i_BFu31ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_C, BFu31i_BFu31ll_C)
//============================================================================


struct  BFu31i_BFu31ll_D  {
  unsigned int v1:31;
  __tsu64 v2:31;
  double v3;
};
//SIG(1 BFu31i_BFu31ll_D) C1{ Fi:31 FL:31 FL}



static void Test_BFu31i_BFu31ll_D()
{
  {
    init_simple_test("BFu31i_BFu31ll_D");
    static STRUCT_IF_C BFu31i_BFu31ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_D");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_D");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_D");
    check_field_offset(lv, v3, 8, "BFu31i_BFu31ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_D, BFu31i_BFu31ll_D)
//============================================================================


struct  BFu31i_BFu31ll_F  {
  unsigned int v1:31;
  __tsu64 v2:31;
  float v3;
};
//SIG(1 BFu31i_BFu31ll_F) C1{ Fi:31 FL:31 Fi}



static void Test_BFu31i_BFu31ll_F()
{
  {
    init_simple_test("BFu31i_BFu31ll_F");
    static STRUCT_IF_C BFu31i_BFu31ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_F");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_F");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_F");
    check_field_offset(lv, v3, 8, "BFu31i_BFu31ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_F, BFu31i_BFu31ll_F)
//============================================================================


struct  BFu31i_BFu31ll_I  {
  unsigned int v1:31;
  __tsu64 v2:31;
  int v3;
};
//SIG(1 BFu31i_BFu31ll_I) C1{ Fi:31 FL:31 Fi}



static void Test_BFu31i_BFu31ll_I()
{
  {
    init_simple_test("BFu31i_BFu31ll_I");
    static STRUCT_IF_C BFu31i_BFu31ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_I");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_I");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_I");
    check_field_offset(lv, v3, 8, "BFu31i_BFu31ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_I, BFu31i_BFu31ll_I)
//============================================================================


struct  BFu31i_BFu31ll_Ip  {
  unsigned int v1:31;
  __tsu64 v2:31;
  int *v3;
};
//SIG(1 BFu31i_BFu31ll_Ip) C1{ Fi:31 FL:31 Fp}



static void Test_BFu31i_BFu31ll_Ip()
{
  {
    init_simple_test("BFu31i_BFu31ll_Ip");
    static STRUCT_IF_C BFu31i_BFu31ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_Ip");
    check_field_offset(lv, v3, 8, "BFu31i_BFu31ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_Ip, BFu31i_BFu31ll_Ip)
//============================================================================


struct  BFu31i_BFu31ll_L  {
  unsigned int v1:31;
  __tsu64 v2:31;
  __tsi64 v3;
};
//SIG(1 BFu31i_BFu31ll_L) C1{ Fi:31 FL:31 FL}



static void Test_BFu31i_BFu31ll_L()
{
  {
    init_simple_test("BFu31i_BFu31ll_L");
    static STRUCT_IF_C BFu31i_BFu31ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_L");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_L");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_L");
    check_field_offset(lv, v3, 8, "BFu31i_BFu31ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_L, BFu31i_BFu31ll_L)
//============================================================================


struct  BFu31i_BFu31ll_S  {
  unsigned int v1:31;
  __tsu64 v2:31;
  short v3;
};
//SIG(1 BFu31i_BFu31ll_S) C1{ Fi:31 FL:31 Fs}



static void Test_BFu31i_BFu31ll_S()
{
  {
    init_simple_test("BFu31i_BFu31ll_S");
    static STRUCT_IF_C BFu31i_BFu31ll_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_S");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_S");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_S");
    check_field_offset(lv, v3, 8, "BFu31i_BFu31ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_S, BFu31i_BFu31ll_S)
//============================================================================


struct  BFu31i_BFu31ll_Uc  {
  unsigned int v1:31;
  __tsu64 v2:31;
  unsigned char v3;
};
//SIG(1 BFu31i_BFu31ll_Uc) C1{ Fi:31 FL:31 Fc}



static void Test_BFu31i_BFu31ll_Uc()
{
  {
    init_simple_test("BFu31i_BFu31ll_Uc");
    static STRUCT_IF_C BFu31i_BFu31ll_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_Uc");
    check_field_offset(lv, v3, 8, "BFu31i_BFu31ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_Uc, BFu31i_BFu31ll_Uc)
//============================================================================


struct  BFu31i_BFu31ll_Ui  {
  unsigned int v1:31;
  __tsu64 v2:31;
  unsigned int v3;
};
//SIG(1 BFu31i_BFu31ll_Ui) C1{ Fi:31 FL:31 Fi}



static void Test_BFu31i_BFu31ll_Ui()
{
  {
    init_simple_test("BFu31i_BFu31ll_Ui");
    static STRUCT_IF_C BFu31i_BFu31ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_Ui");
    check_field_offset(lv, v3, 8, "BFu31i_BFu31ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_Ui, BFu31i_BFu31ll_Ui)
//============================================================================


struct  BFu31i_BFu31ll_Ul  {
  unsigned int v1:31;
  __tsu64 v2:31;
  __tsu64 v3;
};
//SIG(1 BFu31i_BFu31ll_Ul) C1{ Fi:31 FL:31 FL}



static void Test_BFu31i_BFu31ll_Ul()
{
  {
    init_simple_test("BFu31i_BFu31ll_Ul");
    static STRUCT_IF_C BFu31i_BFu31ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu31ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_Ul");
    check_field_offset(lv, v3, 8, "BFu31i_BFu31ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_Ul, BFu31i_BFu31ll_Ul)
//============================================================================


struct  BFu31i_BFu31ll_Us  {
  unsigned int v1:31;
  __tsu64 v2:31;
  unsigned short v3;
};
//SIG(1 BFu31i_BFu31ll_Us) C1{ Fi:31 FL:31 Fs}



static void Test_BFu31i_BFu31ll_Us()
{
  {
    init_simple_test("BFu31i_BFu31ll_Us");
    static STRUCT_IF_C BFu31i_BFu31ll_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_Us");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_Us");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_Us");
    check_field_offset(lv, v3, 8, "BFu31i_BFu31ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_Us, BFu31i_BFu31ll_Us)
//============================================================================


struct  BFu31i_BFu31ll_Vp  {
  unsigned int v1:31;
  __tsu64 v2:31;
  void *v3;
};
//SIG(1 BFu31i_BFu31ll_Vp) C1{ Fi:31 FL:31 Fp}



static void Test_BFu31i_BFu31ll_Vp()
{
  {
    init_simple_test("BFu31i_BFu31ll_Vp");
    static STRUCT_IF_C BFu31i_BFu31ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_Vp");
    check_field_offset(lv, v3, 8, "BFu31i_BFu31ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu31ll_Vp, BFu31i_BFu31ll_Vp)
//============================================================================


struct  BFu31i_BFu32i  {
  unsigned int v1:31;
  unsigned int v2:32;
};
//SIG(1 BFu31i_BFu32i) C1{ Fi:31 Fi:32}



static void Test_BFu31i_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu32i");
    static STRUCT_IF_C BFu31i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i, BFu31i_BFu32i)
//============================================================================


struct  BFu31i_BFu32i_BFu15i  {
  unsigned int v1:31;
  unsigned int v2:32;
  unsigned int v3:15;
};
//SIG(1 BFu31i_BFu32i_BFu15i) C1{ Fi:31 Fi:32 Fi:15}



static void Test_BFu31i_BFu32i_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu32i_BFu15i");
    static STRUCT_IF_C BFu31i_BFu32i_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu32i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu32i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31i_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu32i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_BFu15i, BFu31i_BFu32i_BFu15i)
//============================================================================


struct  BFu31i_BFu32i_BFu15ll  {
  unsigned int v1:31;
  unsigned int v2:32;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_BFu32i_BFu15ll) C1{ Fi:31 Fi:32 FL:15}



static void Test_BFu31i_BFu32i_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu32i_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu32i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31i_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu32i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_BFu15ll, BFu31i_BFu32i_BFu15ll)
//============================================================================


struct  BFu31i_BFu32i_BFu15s  {
  unsigned int v1:31;
  unsigned int v2:32;
  unsigned short v3:15;
};
//SIG(1 BFu31i_BFu32i_BFu15s) C1{ Fi:31 Fi:32 Fs:15}



static void Test_BFu31i_BFu32i_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu32i_BFu15s");
    static STRUCT_IF_C BFu31i_BFu32i_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu32i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu32i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31i_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu32i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_BFu15s, BFu31i_BFu32i_BFu15s)
//============================================================================


struct  BFu31i_BFu32i_BFu16i  {
  unsigned int v1:31;
  unsigned int v2:32;
  unsigned int v3:16;
};
//SIG(1 BFu31i_BFu32i_BFu16i) C1{ Fi:31 Fi:32 Fi:16}



static void Test_BFu31i_BFu32i_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu32i_BFu16i");
    static STRUCT_IF_C BFu31i_BFu32i_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu32i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu32i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31i_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu32i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_BFu16i, BFu31i_BFu32i_BFu16i)
//============================================================================


struct  BFu31i_BFu32i_BFu16ll  {
  unsigned int v1:31;
  unsigned int v2:32;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_BFu32i_BFu16ll) C1{ Fi:31 Fi:32 FL:16}



static void Test_BFu31i_BFu32i_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu32i_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu32i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31i_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu32i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_BFu16ll, BFu31i_BFu32i_BFu16ll)
//============================================================================


struct  BFu31i_BFu32i_BFu16s  {
  unsigned int v1:31;
  unsigned int v2:32;
  unsigned short v3:16;
};
//SIG(1 BFu31i_BFu32i_BFu16s) C1{ Fi:31 Fi:32 Fs:16}



static void Test_BFu31i_BFu32i_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu32i_BFu16s");
    static STRUCT_IF_C BFu31i_BFu32i_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu32i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu32i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31i_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu32i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_BFu16s, BFu31i_BFu32i_BFu16s)
//============================================================================


struct  BFu31i_BFu32i_BFu17i  {
  unsigned int v1:31;
  unsigned int v2:32;
  unsigned int v3:17;
};
//SIG(1 BFu31i_BFu32i_BFu17i) C1{ Fi:31 Fi:32 Fi:17}



static void Test_BFu31i_BFu32i_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu32i_BFu17i");
    static STRUCT_IF_C BFu31i_BFu32i_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu32i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu32i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31i_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu32i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_BFu17i, BFu31i_BFu32i_BFu17i)
//============================================================================


struct  BFu31i_BFu32i_BFu17ll  {
  unsigned int v1:31;
  unsigned int v2:32;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_BFu32i_BFu17ll) C1{ Fi:31 Fi:32 FL:17}



static void Test_BFu31i_BFu32i_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu32i_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu32i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31i_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu32i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_BFu17ll, BFu31i_BFu32i_BFu17ll)
//============================================================================


struct  BFu31i_BFu32i_BFu1c  {
  unsigned int v1:31;
  unsigned int v2:32;
  unsigned char v3:1;
};
//SIG(1 BFu31i_BFu32i_BFu1c) C1{ Fi:31 Fi:32 Fc:1}



static void Test_BFu31i_BFu32i_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu32i_BFu1c");
    static STRUCT_IF_C BFu31i_BFu32i_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu32i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu32i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu1c");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu31i_BFu32i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_BFu1c, BFu31i_BFu32i_BFu1c)
//============================================================================


struct  BFu31i_BFu32i_BFu1i  {
  unsigned int v1:31;
  unsigned int v2:32;
  unsigned int v3:1;
};
//SIG(1 BFu31i_BFu32i_BFu1i) C1{ Fi:31 Fi:32 Fi:1}



static void Test_BFu31i_BFu32i_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu32i_BFu1i");
    static STRUCT_IF_C BFu31i_BFu32i_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu32i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu32i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu1i");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu31i_BFu32i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_BFu1i, BFu31i_BFu32i_BFu1i)
//============================================================================


struct  BFu31i_BFu32i_BFu1ll  {
  unsigned int v1:31;
  unsigned int v2:32;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_BFu32i_BFu1ll) C1{ Fi:31 Fi:32 FL:1}



static void Test_BFu31i_BFu32i_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu32i_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu32i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu1ll");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu31i_BFu32i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_BFu1ll, BFu31i_BFu32i_BFu1ll)
//============================================================================


struct  BFu31i_BFu32i_BFu1s  {
  unsigned int v1:31;
  unsigned int v2:32;
  unsigned short v3:1;
};
//SIG(1 BFu31i_BFu32i_BFu1s) C1{ Fi:31 Fi:32 Fs:1}



static void Test_BFu31i_BFu32i_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu32i_BFu1s");
    static STRUCT_IF_C BFu31i_BFu32i_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu32i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu32i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu1s");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu31i_BFu32i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_BFu1s, BFu31i_BFu32i_BFu1s)
//============================================================================


struct  BFu31i_BFu32i_BFu31i  {
  unsigned int v1:31;
  unsigned int v2:32;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFu32i_BFu31i) C1{ Fi:31 Fi:32 Fi:31}



static void Test_BFu31i_BFu32i_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu32i_BFu31i");
    static STRUCT_IF_C BFu31i_BFu32i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu32i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu32i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_BFu31i, BFu31i_BFu32i_BFu31i)
//============================================================================


struct  BFu31i_BFu32i_BFu31ll  {
  unsigned int v1:31;
  unsigned int v2:32;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFu32i_BFu31ll) C1{ Fi:31 Fi:32 FL:31}



static void Test_BFu31i_BFu32i_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu32i_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu32i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_BFu31ll, BFu31i_BFu32i_BFu31ll)
//============================================================================


struct  BFu31i_BFu32i_BFu32i  {
  unsigned int v1:31;
  unsigned int v2:32;
  unsigned int v3:32;
};
//SIG(1 BFu31i_BFu32i_BFu32i) C1{ Fi:31 Fi:32 Fi:32}



static void Test_BFu31i_BFu32i_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu32i_BFu32i");
    static STRUCT_IF_C BFu31i_BFu32i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu32i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_BFu32i, BFu31i_BFu32i_BFu32i)
//============================================================================


struct  BFu31i_BFu32i_BFu32ll  {
  unsigned int v1:31;
  unsigned int v2:32;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_BFu32i_BFu32ll) C1{ Fi:31 Fi:32 FL:32}



static void Test_BFu31i_BFu32i_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu32i_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu32i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_BFu32ll, BFu31i_BFu32i_BFu32ll)
//============================================================================


struct  BFu31i_BFu32i_BFu33  {
  unsigned int v1:31;
  unsigned int v2:32;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_BFu32i_BFu33) C1{ Fi:31 Fi:32 FL:33}



static void Test_BFu31i_BFu32i_BFu33()
{
  {
    init_simple_test("BFu31i_BFu32i_BFu33");
    static STRUCT_IF_C BFu31i_BFu32i_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu32i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu31i_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu31i_BFu32i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_BFu33, BFu31i_BFu32i_BFu33)
//============================================================================


struct  BFu31i_BFu32i_BFu7c  {
  unsigned int v1:31;
  unsigned int v2:32;
  unsigned char v3:7;
};
//SIG(1 BFu31i_BFu32i_BFu7c) C1{ Fi:31 Fi:32 Fc:7}



static void Test_BFu31i_BFu32i_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu32i_BFu7c");
    static STRUCT_IF_C BFu31i_BFu32i_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu32i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu32i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu32i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_BFu7c, BFu31i_BFu32i_BFu7c)
//============================================================================


struct  BFu31i_BFu32i_BFu7i  {
  unsigned int v1:31;
  unsigned int v2:32;
  unsigned int v3:7;
};
//SIG(1 BFu31i_BFu32i_BFu7i) C1{ Fi:31 Fi:32 Fi:7}



static void Test_BFu31i_BFu32i_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu32i_BFu7i");
    static STRUCT_IF_C BFu31i_BFu32i_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu32i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu32i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu32i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_BFu7i, BFu31i_BFu32i_BFu7i)
//============================================================================


struct  BFu31i_BFu32i_BFu7ll  {
  unsigned int v1:31;
  unsigned int v2:32;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_BFu32i_BFu7ll) C1{ Fi:31 Fi:32 FL:7}



static void Test_BFu31i_BFu32i_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu32i_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu32i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu32i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_BFu7ll, BFu31i_BFu32i_BFu7ll)
//============================================================================


struct  BFu31i_BFu32i_BFu7s  {
  unsigned int v1:31;
  unsigned int v2:32;
  unsigned short v3:7;
};
//SIG(1 BFu31i_BFu32i_BFu7s) C1{ Fi:31 Fi:32 Fs:7}



static void Test_BFu31i_BFu32i_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu32i_BFu7s");
    static STRUCT_IF_C BFu31i_BFu32i_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu32i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu32i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu32i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_BFu7s, BFu31i_BFu32i_BFu7s)
//============================================================================


struct  BFu31i_BFu32i_BFu8c  {
  unsigned int v1:31;
  unsigned int v2:32;
  unsigned char v3:8;
};
//SIG(1 BFu31i_BFu32i_BFu8c) C1{ Fi:31 Fi:32 Fc:8}



static void Test_BFu31i_BFu32i_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu32i_BFu8c");
    static STRUCT_IF_C BFu31i_BFu32i_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu32i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu32i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu32i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_BFu8c, BFu31i_BFu32i_BFu8c)
//============================================================================


struct  BFu31i_BFu32i_BFu8i  {
  unsigned int v1:31;
  unsigned int v2:32;
  unsigned int v3:8;
};
//SIG(1 BFu31i_BFu32i_BFu8i) C1{ Fi:31 Fi:32 Fi:8}



static void Test_BFu31i_BFu32i_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu32i_BFu8i");
    static STRUCT_IF_C BFu31i_BFu32i_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu32i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu32i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu32i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_BFu8i, BFu31i_BFu32i_BFu8i)
//============================================================================


struct  BFu31i_BFu32i_BFu8ll  {
  unsigned int v1:31;
  unsigned int v2:32;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_BFu32i_BFu8ll) C1{ Fi:31 Fi:32 FL:8}



static void Test_BFu31i_BFu32i_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu32i_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu32i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu32i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_BFu8ll, BFu31i_BFu32i_BFu8ll)
//============================================================================


struct  BFu31i_BFu32i_BFu8s  {
  unsigned int v1:31;
  unsigned int v2:32;
  unsigned short v3:8;
};
//SIG(1 BFu31i_BFu32i_BFu8s) C1{ Fi:31 Fi:32 Fs:8}



static void Test_BFu31i_BFu32i_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu32i_BFu8s");
    static STRUCT_IF_C BFu31i_BFu32i_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu32i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu32i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu32i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_BFu8s, BFu31i_BFu32i_BFu8s)
//============================================================================


struct  BFu31i_BFu32i_BFu9i  {
  unsigned int v1:31;
  unsigned int v2:32;
  unsigned int v3:9;
};
//SIG(1 BFu31i_BFu32i_BFu9i) C1{ Fi:31 Fi:32 Fi:9}



static void Test_BFu31i_BFu32i_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu32i_BFu9i");
    static STRUCT_IF_C BFu31i_BFu32i_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu32i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu32i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31i_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu32i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_BFu9i, BFu31i_BFu32i_BFu9i)
//============================================================================


struct  BFu31i_BFu32i_BFu9ll  {
  unsigned int v1:31;
  unsigned int v2:32;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_BFu32i_BFu9ll) C1{ Fi:31 Fi:32 FL:9}



static void Test_BFu31i_BFu32i_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu32i_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu32i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31i_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu32i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_BFu9ll, BFu31i_BFu32i_BFu9ll)
//============================================================================


struct  BFu31i_BFu32i_BFu9s  {
  unsigned int v1:31;
  unsigned int v2:32;
  unsigned short v3:9;
};
//SIG(1 BFu31i_BFu32i_BFu9s) C1{ Fi:31 Fi:32 Fs:9}



static void Test_BFu31i_BFu32i_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu32i_BFu9s");
    static STRUCT_IF_C BFu31i_BFu32i_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu32i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu32i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31i_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu32i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_BFu9s, BFu31i_BFu32i_BFu9s)
//============================================================================


struct  BFu31i_BFu32i_C  {
  unsigned int v1:31;
  unsigned int v2:32;
  char v3;
};
//SIG(1 BFu31i_BFu32i_C) C1{ Fi:31 Fi:32 Fc}



static void Test_BFu31i_BFu32i_C()
{
  {
    init_simple_test("BFu31i_BFu32i_C");
    static STRUCT_IF_C BFu31i_BFu32i_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu32i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu32i_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_C");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_C");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_C");
    check_field_offset(lv, v3, 8, "BFu31i_BFu32i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_C, BFu31i_BFu32i_C)
//============================================================================


struct  BFu31i_BFu32i_D  {
  unsigned int v1:31;
  unsigned int v2:32;
  double v3;
};
//SIG(1 BFu31i_BFu32i_D) C1{ Fi:31 Fi:32 FL}



static void Test_BFu31i_BFu32i_D()
{
  {
    init_simple_test("BFu31i_BFu32i_D");
    static STRUCT_IF_C BFu31i_BFu32i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu32i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32i_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_D");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_D");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_D");
    check_field_offset(lv, v3, 8, "BFu31i_BFu32i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_D, BFu31i_BFu32i_D)
//============================================================================


struct  BFu31i_BFu32i_F  {
  unsigned int v1:31;
  unsigned int v2:32;
  float v3;
};
//SIG(1 BFu31i_BFu32i_F) C1{ Fi:31 Fi:32 Fi}



static void Test_BFu31i_BFu32i_F()
{
  {
    init_simple_test("BFu31i_BFu32i_F");
    static STRUCT_IF_C BFu31i_BFu32i_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu32i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu32i_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_F");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_F");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_F");
    check_field_offset(lv, v3, 8, "BFu31i_BFu32i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_F, BFu31i_BFu32i_F)
//============================================================================


struct  BFu31i_BFu32i_I  {
  unsigned int v1:31;
  unsigned int v2:32;
  int v3;
};
//SIG(1 BFu31i_BFu32i_I) C1{ Fi:31 Fi:32 Fi}



static void Test_BFu31i_BFu32i_I()
{
  {
    init_simple_test("BFu31i_BFu32i_I");
    static STRUCT_IF_C BFu31i_BFu32i_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu32i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu32i_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_I");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_I");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_I");
    check_field_offset(lv, v3, 8, "BFu31i_BFu32i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_I, BFu31i_BFu32i_I)
//============================================================================


struct  BFu31i_BFu32i_Ip  {
  unsigned int v1:31;
  unsigned int v2:32;
  int *v3;
};
//SIG(1 BFu31i_BFu32i_Ip) C1{ Fi:31 Fi:32 Fp}



static void Test_BFu31i_BFu32i_Ip()
{
  {
    init_simple_test("BFu31i_BFu32i_Ip");
    static STRUCT_IF_C BFu31i_BFu32i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_Ip");
    check_field_offset(lv, v3, 8, "BFu31i_BFu32i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_Ip, BFu31i_BFu32i_Ip)
//============================================================================


struct  BFu31i_BFu32i_L  {
  unsigned int v1:31;
  unsigned int v2:32;
  __tsi64 v3;
};
//SIG(1 BFu31i_BFu32i_L) C1{ Fi:31 Fi:32 FL}



static void Test_BFu31i_BFu32i_L()
{
  {
    init_simple_test("BFu31i_BFu32i_L");
    static STRUCT_IF_C BFu31i_BFu32i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu32i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32i_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_L");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_L");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_L");
    check_field_offset(lv, v3, 8, "BFu31i_BFu32i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_L, BFu31i_BFu32i_L)
//============================================================================


struct  BFu31i_BFu32i_S  {
  unsigned int v1:31;
  unsigned int v2:32;
  short v3;
};
//SIG(1 BFu31i_BFu32i_S) C1{ Fi:31 Fi:32 Fs}



static void Test_BFu31i_BFu32i_S()
{
  {
    init_simple_test("BFu31i_BFu32i_S");
    static STRUCT_IF_C BFu31i_BFu32i_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu32i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu32i_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_S");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_S");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_S");
    check_field_offset(lv, v3, 8, "BFu31i_BFu32i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_S, BFu31i_BFu32i_S)
//============================================================================


struct  BFu31i_BFu32i_Uc  {
  unsigned int v1:31;
  unsigned int v2:32;
  unsigned char v3;
};
//SIG(1 BFu31i_BFu32i_Uc) C1{ Fi:31 Fi:32 Fc}



static void Test_BFu31i_BFu32i_Uc()
{
  {
    init_simple_test("BFu31i_BFu32i_Uc");
    static STRUCT_IF_C BFu31i_BFu32i_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu32i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu32i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_Uc");
    check_field_offset(lv, v3, 8, "BFu31i_BFu32i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_Uc, BFu31i_BFu32i_Uc)
//============================================================================


struct  BFu31i_BFu32i_Ui  {
  unsigned int v1:31;
  unsigned int v2:32;
  unsigned int v3;
};
//SIG(1 BFu31i_BFu32i_Ui) C1{ Fi:31 Fi:32 Fi}



static void Test_BFu31i_BFu32i_Ui()
{
  {
    init_simple_test("BFu31i_BFu32i_Ui");
    static STRUCT_IF_C BFu31i_BFu32i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu32i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu32i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_Ui");
    check_field_offset(lv, v3, 8, "BFu31i_BFu32i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_Ui, BFu31i_BFu32i_Ui)
//============================================================================


struct  BFu31i_BFu32i_Ul  {
  unsigned int v1:31;
  unsigned int v2:32;
  __tsu64 v3;
};
//SIG(1 BFu31i_BFu32i_Ul) C1{ Fi:31 Fi:32 FL}



static void Test_BFu31i_BFu32i_Ul()
{
  {
    init_simple_test("BFu31i_BFu32i_Ul");
    static STRUCT_IF_C BFu31i_BFu32i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu32i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_Ul");
    check_field_offset(lv, v3, 8, "BFu31i_BFu32i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_Ul, BFu31i_BFu32i_Ul)
//============================================================================


struct  BFu31i_BFu32i_Us  {
  unsigned int v1:31;
  unsigned int v2:32;
  unsigned short v3;
};
//SIG(1 BFu31i_BFu32i_Us) C1{ Fi:31 Fi:32 Fs}



static void Test_BFu31i_BFu32i_Us()
{
  {
    init_simple_test("BFu31i_BFu32i_Us");
    static STRUCT_IF_C BFu31i_BFu32i_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu32i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu32i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_Us");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_Us");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_Us");
    check_field_offset(lv, v3, 8, "BFu31i_BFu32i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_Us, BFu31i_BFu32i_Us)
//============================================================================


struct  BFu31i_BFu32i_Vp  {
  unsigned int v1:31;
  unsigned int v2:32;
  void *v3;
};
//SIG(1 BFu31i_BFu32i_Vp) C1{ Fi:31 Fi:32 Fp}



static void Test_BFu31i_BFu32i_Vp()
{
  {
    init_simple_test("BFu31i_BFu32i_Vp");
    static STRUCT_IF_C BFu31i_BFu32i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_Vp");
    check_field_offset(lv, v3, 8, "BFu31i_BFu32i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32i_Vp, BFu31i_BFu32i_Vp)
//============================================================================


struct  BFu31i_BFu32ll  {
  unsigned int v1:31;
  __tsu64 v2:32;
};
//SIG(1 BFu31i_BFu32ll) C1{ Fi:31 FL:32}



static void Test_BFu31i_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll, BFu31i_BFu32ll)
//============================================================================


struct  BFu31i_BFu32ll_BFu15i  {
  unsigned int v1:31;
  __tsu64 v2:32;
  unsigned int v3:15;
};
//SIG(1 BFu31i_BFu32ll_BFu15i) C1{ Fi:31 FL:32 Fi:15}



static void Test_BFu31i_BFu32ll_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu32ll_BFu15i");
    static STRUCT_IF_C BFu31i_BFu32ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31i_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu32ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_BFu15i, BFu31i_BFu32ll_BFu15i)
//============================================================================


struct  BFu31i_BFu32ll_BFu15ll  {
  unsigned int v1:31;
  __tsu64 v2:32;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_BFu32ll_BFu15ll) C1{ Fi:31 FL:32 FL:15}



static void Test_BFu31i_BFu32ll_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu32ll_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu32ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, 1, "BFu31i_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, hide_ull(1LL<<14), "BFu31i_BFu32ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_BFu15ll, BFu31i_BFu32ll_BFu15ll)
//============================================================================


struct  BFu31i_BFu32ll_BFu15s  {
  unsigned int v1:31;
  __tsu64 v2:32;
  unsigned short v3:15;
};
//SIG(1 BFu31i_BFu32ll_BFu15s) C1{ Fi:31 FL:32 Fs:15}



static void Test_BFu31i_BFu32ll_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu32ll_BFu15s");
    static STRUCT_IF_C BFu31i_BFu32ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31i_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu32ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_BFu15s, BFu31i_BFu32ll_BFu15s)
//============================================================================


struct  BFu31i_BFu32ll_BFu16i  {
  unsigned int v1:31;
  __tsu64 v2:32;
  unsigned int v3:16;
};
//SIG(1 BFu31i_BFu32ll_BFu16i) C1{ Fi:31 FL:32 Fi:16}



static void Test_BFu31i_BFu32ll_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu32ll_BFu16i");
    static STRUCT_IF_C BFu31i_BFu32ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31i_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu32ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_BFu16i, BFu31i_BFu32ll_BFu16i)
//============================================================================


struct  BFu31i_BFu32ll_BFu16ll  {
  unsigned int v1:31;
  __tsu64 v2:32;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_BFu32ll_BFu16ll) C1{ Fi:31 FL:32 FL:16}



static void Test_BFu31i_BFu32ll_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu32ll_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu32ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, 1, "BFu31i_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, hide_ull(1LL<<15), "BFu31i_BFu32ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_BFu16ll, BFu31i_BFu32ll_BFu16ll)
//============================================================================


struct  BFu31i_BFu32ll_BFu16s  {
  unsigned int v1:31;
  __tsu64 v2:32;
  unsigned short v3:16;
};
//SIG(1 BFu31i_BFu32ll_BFu16s) C1{ Fi:31 FL:32 Fs:16}



static void Test_BFu31i_BFu32ll_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu32ll_BFu16s");
    static STRUCT_IF_C BFu31i_BFu32ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31i_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu32ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_BFu16s, BFu31i_BFu32ll_BFu16s)
//============================================================================


struct  BFu31i_BFu32ll_BFu17i  {
  unsigned int v1:31;
  __tsu64 v2:32;
  unsigned int v3:17;
};
//SIG(1 BFu31i_BFu32ll_BFu17i) C1{ Fi:31 FL:32 Fi:17}



static void Test_BFu31i_BFu32ll_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu32ll_BFu17i");
    static STRUCT_IF_C BFu31i_BFu32ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31i_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu32ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_BFu17i, BFu31i_BFu32ll_BFu17i)
//============================================================================


struct  BFu31i_BFu32ll_BFu17ll  {
  unsigned int v1:31;
  __tsu64 v2:32;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_BFu32ll_BFu17ll) C1{ Fi:31 FL:32 FL:17}



static void Test_BFu31i_BFu32ll_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu32ll_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu32ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, 1, "BFu31i_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, hide_ull(1LL<<16), "BFu31i_BFu32ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_BFu17ll, BFu31i_BFu32ll_BFu17ll)
//============================================================================


struct  BFu31i_BFu32ll_BFu1c  {
  unsigned int v1:31;
  __tsu64 v2:32;
  unsigned char v3:1;
};
//SIG(1 BFu31i_BFu32ll_BFu1c) C1{ Fi:31 FL:32 Fc:1}



static void Test_BFu31i_BFu32ll_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu32ll_BFu1c");
    static STRUCT_IF_C BFu31i_BFu32ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu32ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu1c");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu31i_BFu32ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_BFu1c, BFu31i_BFu32ll_BFu1c)
//============================================================================


struct  BFu31i_BFu32ll_BFu1i  {
  unsigned int v1:31;
  __tsu64 v2:32;
  unsigned int v3:1;
};
//SIG(1 BFu31i_BFu32ll_BFu1i) C1{ Fi:31 FL:32 Fi:1}



static void Test_BFu31i_BFu32ll_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu32ll_BFu1i");
    static STRUCT_IF_C BFu31i_BFu32ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu32ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu1i");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu31i_BFu32ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_BFu1i, BFu31i_BFu32ll_BFu1i)
//============================================================================


struct  BFu31i_BFu32ll_BFu1ll  {
  unsigned int v1:31;
  __tsu64 v2:32;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_BFu32ll_BFu1ll) C1{ Fi:31 FL:32 FL:1}



static void Test_BFu31i_BFu32ll_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu32ll_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu32ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu32ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu31i_BFu32ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_BFu1ll, BFu31i_BFu32ll_BFu1ll)
//============================================================================


struct  BFu31i_BFu32ll_BFu1s  {
  unsigned int v1:31;
  __tsu64 v2:32;
  unsigned short v3:1;
};
//SIG(1 BFu31i_BFu32ll_BFu1s) C1{ Fi:31 FL:32 Fs:1}



static void Test_BFu31i_BFu32ll_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu32ll_BFu1s");
    static STRUCT_IF_C BFu31i_BFu32ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu32ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu1s");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu31i_BFu32ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_BFu1s, BFu31i_BFu32ll_BFu1s)
//============================================================================


struct  BFu31i_BFu32ll_BFu31i  {
  unsigned int v1:31;
  __tsu64 v2:32;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFu32ll_BFu31i) C1{ Fi:31 FL:32 Fi:31}



static void Test_BFu31i_BFu32ll_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu32ll_BFu31i");
    static STRUCT_IF_C BFu31i_BFu32ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_BFu31i, BFu31i_BFu32ll_BFu31i)
//============================================================================


struct  BFu31i_BFu32ll_BFu31ll  {
  unsigned int v1:31;
  __tsu64 v2:32;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFu32ll_BFu31ll) C1{ Fi:31 FL:32 FL:31}



static void Test_BFu31i_BFu32ll_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu32ll_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu32ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31i_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_BFu31ll, BFu31i_BFu32ll_BFu31ll)
//============================================================================


struct  BFu31i_BFu32ll_BFu32i  {
  unsigned int v1:31;
  __tsu64 v2:32;
  unsigned int v3:32;
};
//SIG(1 BFu31i_BFu32ll_BFu32i) C1{ Fi:31 FL:32 Fi:32}



static void Test_BFu31i_BFu32ll_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu32ll_BFu32i");
    static STRUCT_IF_C BFu31i_BFu32ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_BFu32i, BFu31i_BFu32ll_BFu32i)
//============================================================================


struct  BFu31i_BFu32ll_BFu32ll  {
  unsigned int v1:31;
  __tsu64 v2:32;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_BFu32ll_BFu32ll) C1{ Fi:31 FL:32 FL:32}



static void Test_BFu31i_BFu32ll_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu32ll_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, 1, "BFu31i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_BFu32ll, BFu31i_BFu32ll_BFu32ll)
//============================================================================


struct  BFu31i_BFu32ll_BFu33  {
  unsigned int v1:31;
  __tsu64 v2:32;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_BFu32ll_BFu33) C1{ Fi:31 FL:32 FL:33}



static void Test_BFu31i_BFu32ll_BFu33()
{
  {
    init_simple_test("BFu31i_BFu32ll_BFu33");
    static STRUCT_IF_C BFu31i_BFu32ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, 1, "BFu31i_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu31i_BFu32ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_BFu33, BFu31i_BFu32ll_BFu33)
//============================================================================


struct  BFu31i_BFu32ll_BFu7c  {
  unsigned int v1:31;
  __tsu64 v2:32;
  unsigned char v3:7;
};
//SIG(1 BFu31i_BFu32ll_BFu7c) C1{ Fi:31 FL:32 Fc:7}



static void Test_BFu31i_BFu32ll_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu32ll_BFu7c");
    static STRUCT_IF_C BFu31i_BFu32ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu32ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_BFu7c, BFu31i_BFu32ll_BFu7c)
//============================================================================


struct  BFu31i_BFu32ll_BFu7i  {
  unsigned int v1:31;
  __tsu64 v2:32;
  unsigned int v3:7;
};
//SIG(1 BFu31i_BFu32ll_BFu7i) C1{ Fi:31 FL:32 Fi:7}



static void Test_BFu31i_BFu32ll_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu32ll_BFu7i");
    static STRUCT_IF_C BFu31i_BFu32ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu32ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_BFu7i, BFu31i_BFu32ll_BFu7i)
//============================================================================


struct  BFu31i_BFu32ll_BFu7ll  {
  unsigned int v1:31;
  __tsu64 v2:32;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_BFu32ll_BFu7ll) C1{ Fi:31 FL:32 FL:7}



static void Test_BFu31i_BFu32ll_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu32ll_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu32ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, 1, "BFu31i_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, hide_ull(1LL<<6), "BFu31i_BFu32ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_BFu7ll, BFu31i_BFu32ll_BFu7ll)
//============================================================================


struct  BFu31i_BFu32ll_BFu7s  {
  unsigned int v1:31;
  __tsu64 v2:32;
  unsigned short v3:7;
};
//SIG(1 BFu31i_BFu32ll_BFu7s) C1{ Fi:31 FL:32 Fs:7}



static void Test_BFu31i_BFu32ll_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu32ll_BFu7s");
    static STRUCT_IF_C BFu31i_BFu32ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu32ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_BFu7s, BFu31i_BFu32ll_BFu7s)
//============================================================================


struct  BFu31i_BFu32ll_BFu8c  {
  unsigned int v1:31;
  __tsu64 v2:32;
  unsigned char v3:8;
};
//SIG(1 BFu31i_BFu32ll_BFu8c) C1{ Fi:31 FL:32 Fc:8}



static void Test_BFu31i_BFu32ll_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu32ll_BFu8c");
    static STRUCT_IF_C BFu31i_BFu32ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu32ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_BFu8c, BFu31i_BFu32ll_BFu8c)
//============================================================================


struct  BFu31i_BFu32ll_BFu8i  {
  unsigned int v1:31;
  __tsu64 v2:32;
  unsigned int v3:8;
};
//SIG(1 BFu31i_BFu32ll_BFu8i) C1{ Fi:31 FL:32 Fi:8}



static void Test_BFu31i_BFu32ll_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu32ll_BFu8i");
    static STRUCT_IF_C BFu31i_BFu32ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu32ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_BFu8i, BFu31i_BFu32ll_BFu8i)
//============================================================================


struct  BFu31i_BFu32ll_BFu8ll  {
  unsigned int v1:31;
  __tsu64 v2:32;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_BFu32ll_BFu8ll) C1{ Fi:31 FL:32 FL:8}



static void Test_BFu31i_BFu32ll_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu32ll_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu32ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, 1, "BFu31i_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, hide_ull(1LL<<7), "BFu31i_BFu32ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_BFu8ll, BFu31i_BFu32ll_BFu8ll)
//============================================================================


struct  BFu31i_BFu32ll_BFu8s  {
  unsigned int v1:31;
  __tsu64 v2:32;
  unsigned short v3:8;
};
//SIG(1 BFu31i_BFu32ll_BFu8s) C1{ Fi:31 FL:32 Fs:8}



static void Test_BFu31i_BFu32ll_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu32ll_BFu8s");
    static STRUCT_IF_C BFu31i_BFu32ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu32ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_BFu8s, BFu31i_BFu32ll_BFu8s)
//============================================================================


struct  BFu31i_BFu32ll_BFu9i  {
  unsigned int v1:31;
  __tsu64 v2:32;
  unsigned int v3:9;
};
//SIG(1 BFu31i_BFu32ll_BFu9i) C1{ Fi:31 FL:32 Fi:9}



static void Test_BFu31i_BFu32ll_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu32ll_BFu9i");
    static STRUCT_IF_C BFu31i_BFu32ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31i_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu32ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_BFu9i, BFu31i_BFu32ll_BFu9i)
//============================================================================


struct  BFu31i_BFu32ll_BFu9ll  {
  unsigned int v1:31;
  __tsu64 v2:32;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_BFu32ll_BFu9ll) C1{ Fi:31 FL:32 FL:9}



static void Test_BFu31i_BFu32ll_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu32ll_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu32ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, 1, "BFu31i_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, hide_ull(1LL<<8), "BFu31i_BFu32ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_BFu9ll, BFu31i_BFu32ll_BFu9ll)
//============================================================================


struct  BFu31i_BFu32ll_BFu9s  {
  unsigned int v1:31;
  __tsu64 v2:32;
  unsigned short v3:9;
};
//SIG(1 BFu31i_BFu32ll_BFu9s) C1{ Fi:31 FL:32 Fs:9}



static void Test_BFu31i_BFu32ll_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu32ll_BFu9s");
    static STRUCT_IF_C BFu31i_BFu32ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31i_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu32ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_BFu9s, BFu31i_BFu32ll_BFu9s)
//============================================================================


struct  BFu31i_BFu32ll_C  {
  unsigned int v1:31;
  __tsu64 v2:32;
  char v3;
};
//SIG(1 BFu31i_BFu32ll_C) C1{ Fi:31 FL:32 Fc}



static void Test_BFu31i_BFu32ll_C()
{
  {
    init_simple_test("BFu31i_BFu32ll_C");
    static STRUCT_IF_C BFu31i_BFu32ll_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_C");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_C");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_C");
    check_field_offset(lv, v3, 8, "BFu31i_BFu32ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_C, BFu31i_BFu32ll_C)
//============================================================================


struct  BFu31i_BFu32ll_D  {
  unsigned int v1:31;
  __tsu64 v2:32;
  double v3;
};
//SIG(1 BFu31i_BFu32ll_D) C1{ Fi:31 FL:32 FL}



static void Test_BFu31i_BFu32ll_D()
{
  {
    init_simple_test("BFu31i_BFu32ll_D");
    static STRUCT_IF_C BFu31i_BFu32ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu32ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_D");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_D");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_D");
    check_field_offset(lv, v3, 8, "BFu31i_BFu32ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_D, BFu31i_BFu32ll_D)
//============================================================================


struct  BFu31i_BFu32ll_F  {
  unsigned int v1:31;
  __tsu64 v2:32;
  float v3;
};
//SIG(1 BFu31i_BFu32ll_F) C1{ Fi:31 FL:32 Fi}



static void Test_BFu31i_BFu32ll_F()
{
  {
    init_simple_test("BFu31i_BFu32ll_F");
    static STRUCT_IF_C BFu31i_BFu32ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_F");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_F");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_F");
    check_field_offset(lv, v3, 8, "BFu31i_BFu32ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_F, BFu31i_BFu32ll_F)
//============================================================================


struct  BFu31i_BFu32ll_I  {
  unsigned int v1:31;
  __tsu64 v2:32;
  int v3;
};
//SIG(1 BFu31i_BFu32ll_I) C1{ Fi:31 FL:32 Fi}



static void Test_BFu31i_BFu32ll_I()
{
  {
    init_simple_test("BFu31i_BFu32ll_I");
    static STRUCT_IF_C BFu31i_BFu32ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_I");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_I");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_I");
    check_field_offset(lv, v3, 8, "BFu31i_BFu32ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_I, BFu31i_BFu32ll_I)
//============================================================================


struct  BFu31i_BFu32ll_Ip  {
  unsigned int v1:31;
  __tsu64 v2:32;
  int *v3;
};
//SIG(1 BFu31i_BFu32ll_Ip) C1{ Fi:31 FL:32 Fp}



static void Test_BFu31i_BFu32ll_Ip()
{
  {
    init_simple_test("BFu31i_BFu32ll_Ip");
    static STRUCT_IF_C BFu31i_BFu32ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_Ip");
    check_field_offset(lv, v3, 8, "BFu31i_BFu32ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_Ip, BFu31i_BFu32ll_Ip)
//============================================================================


struct  BFu31i_BFu32ll_L  {
  unsigned int v1:31;
  __tsu64 v2:32;
  __tsi64 v3;
};
//SIG(1 BFu31i_BFu32ll_L) C1{ Fi:31 FL:32 FL}



static void Test_BFu31i_BFu32ll_L()
{
  {
    init_simple_test("BFu31i_BFu32ll_L");
    static STRUCT_IF_C BFu31i_BFu32ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu32ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_L");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_L");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_L");
    check_field_offset(lv, v3, 8, "BFu31i_BFu32ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_L, BFu31i_BFu32ll_L)
//============================================================================


struct  BFu31i_BFu32ll_S  {
  unsigned int v1:31;
  __tsu64 v2:32;
  short v3;
};
//SIG(1 BFu31i_BFu32ll_S) C1{ Fi:31 FL:32 Fs}



static void Test_BFu31i_BFu32ll_S()
{
  {
    init_simple_test("BFu31i_BFu32ll_S");
    static STRUCT_IF_C BFu31i_BFu32ll_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_S");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_S");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_S");
    check_field_offset(lv, v3, 8, "BFu31i_BFu32ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_S, BFu31i_BFu32ll_S)
//============================================================================


struct  BFu31i_BFu32ll_Uc  {
  unsigned int v1:31;
  __tsu64 v2:32;
  unsigned char v3;
};
//SIG(1 BFu31i_BFu32ll_Uc) C1{ Fi:31 FL:32 Fc}



static void Test_BFu31i_BFu32ll_Uc()
{
  {
    init_simple_test("BFu31i_BFu32ll_Uc");
    static STRUCT_IF_C BFu31i_BFu32ll_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_Uc");
    check_field_offset(lv, v3, 8, "BFu31i_BFu32ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_Uc, BFu31i_BFu32ll_Uc)
//============================================================================


struct  BFu31i_BFu32ll_Ui  {
  unsigned int v1:31;
  __tsu64 v2:32;
  unsigned int v3;
};
//SIG(1 BFu31i_BFu32ll_Ui) C1{ Fi:31 FL:32 Fi}



static void Test_BFu31i_BFu32ll_Ui()
{
  {
    init_simple_test("BFu31i_BFu32ll_Ui");
    static STRUCT_IF_C BFu31i_BFu32ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_Ui");
    check_field_offset(lv, v3, 8, "BFu31i_BFu32ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_Ui, BFu31i_BFu32ll_Ui)
//============================================================================


struct  BFu31i_BFu32ll_Ul  {
  unsigned int v1:31;
  __tsu64 v2:32;
  __tsu64 v3;
};
//SIG(1 BFu31i_BFu32ll_Ul) C1{ Fi:31 FL:32 FL}



static void Test_BFu31i_BFu32ll_Ul()
{
  {
    init_simple_test("BFu31i_BFu32ll_Ul");
    static STRUCT_IF_C BFu31i_BFu32ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu32ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_Ul");
    check_field_offset(lv, v3, 8, "BFu31i_BFu32ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_Ul, BFu31i_BFu32ll_Ul)
//============================================================================


struct  BFu31i_BFu32ll_Us  {
  unsigned int v1:31;
  __tsu64 v2:32;
  unsigned short v3;
};
//SIG(1 BFu31i_BFu32ll_Us) C1{ Fi:31 FL:32 Fs}



static void Test_BFu31i_BFu32ll_Us()
{
  {
    init_simple_test("BFu31i_BFu32ll_Us");
    static STRUCT_IF_C BFu31i_BFu32ll_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_Us");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_Us");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_Us");
    check_field_offset(lv, v3, 8, "BFu31i_BFu32ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_Us, BFu31i_BFu32ll_Us)
//============================================================================


struct  BFu31i_BFu32ll_Vp  {
  unsigned int v1:31;
  __tsu64 v2:32;
  void *v3;
};
//SIG(1 BFu31i_BFu32ll_Vp) C1{ Fi:31 FL:32 Fp}



static void Test_BFu31i_BFu32ll_Vp()
{
  {
    init_simple_test("BFu31i_BFu32ll_Vp");
    static STRUCT_IF_C BFu31i_BFu32ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_Vp");
    check_field_offset(lv, v3, 8, "BFu31i_BFu32ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu32ll_Vp, BFu31i_BFu32ll_Vp)
//============================================================================


struct  BFu31i_BFu33  {
  unsigned int v1:31;
  __tsu64 v2:33;
};
//SIG(1 BFu31i_BFu33) C1{ Fi:31 FL:33}



static void Test_BFu31i_BFu33()
{
  {
    init_simple_test("BFu31i_BFu33");
    static STRUCT_IF_C BFu31i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33, BFu31i_BFu33)
//============================================================================


struct  BFu31i_BFu33_BFu15i  {
  unsigned int v1:31;
  __tsu64 v2:33;
  unsigned int v3:15;
};
//SIG(1 BFu31i_BFu33_BFu15i) C1{ Fi:31 FL:33 Fi:15}



static void Test_BFu31i_BFu33_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu33_BFu15i");
    static STRUCT_IF_C BFu31i_BFu33_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31i_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu33_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_BFu15i, BFu31i_BFu33_BFu15i)
//============================================================================


struct  BFu31i_BFu33_BFu15ll  {
  unsigned int v1:31;
  __tsu64 v2:33;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_BFu33_BFu15ll) C1{ Fi:31 FL:33 FL:15}



static void Test_BFu31i_BFu33_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu33_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu33_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31i_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu33_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_BFu15ll, BFu31i_BFu33_BFu15ll)
//============================================================================


struct  BFu31i_BFu33_BFu15s  {
  unsigned int v1:31;
  __tsu64 v2:33;
  unsigned short v3:15;
};
//SIG(1 BFu31i_BFu33_BFu15s) C1{ Fi:31 FL:33 Fs:15}



static void Test_BFu31i_BFu33_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu33_BFu15s");
    static STRUCT_IF_C BFu31i_BFu33_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31i_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu33_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_BFu15s, BFu31i_BFu33_BFu15s)
//============================================================================


struct  BFu31i_BFu33_BFu16i  {
  unsigned int v1:31;
  __tsu64 v2:33;
  unsigned int v3:16;
};
//SIG(1 BFu31i_BFu33_BFu16i) C1{ Fi:31 FL:33 Fi:16}



static void Test_BFu31i_BFu33_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu33_BFu16i");
    static STRUCT_IF_C BFu31i_BFu33_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31i_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu33_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_BFu16i, BFu31i_BFu33_BFu16i)
//============================================================================


struct  BFu31i_BFu33_BFu16ll  {
  unsigned int v1:31;
  __tsu64 v2:33;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_BFu33_BFu16ll) C1{ Fi:31 FL:33 FL:16}



static void Test_BFu31i_BFu33_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu33_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu33_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31i_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu33_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_BFu16ll, BFu31i_BFu33_BFu16ll)
//============================================================================


struct  BFu31i_BFu33_BFu16s  {
  unsigned int v1:31;
  __tsu64 v2:33;
  unsigned short v3:16;
};
//SIG(1 BFu31i_BFu33_BFu16s) C1{ Fi:31 FL:33 Fs:16}



static void Test_BFu31i_BFu33_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu33_BFu16s");
    static STRUCT_IF_C BFu31i_BFu33_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31i_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu33_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_BFu16s, BFu31i_BFu33_BFu16s)
//============================================================================


struct  BFu31i_BFu33_BFu17i  {
  unsigned int v1:31;
  __tsu64 v2:33;
  unsigned int v3:17;
};
//SIG(1 BFu31i_BFu33_BFu17i) C1{ Fi:31 FL:33 Fi:17}



static void Test_BFu31i_BFu33_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu33_BFu17i");
    static STRUCT_IF_C BFu31i_BFu33_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31i_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu33_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_BFu17i, BFu31i_BFu33_BFu17i)
//============================================================================


struct  BFu31i_BFu33_BFu17ll  {
  unsigned int v1:31;
  __tsu64 v2:33;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_BFu33_BFu17ll) C1{ Fi:31 FL:33 FL:17}



static void Test_BFu31i_BFu33_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu33_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu33_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31i_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu33_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_BFu17ll, BFu31i_BFu33_BFu17ll)
//============================================================================


struct  BFu31i_BFu33_BFu1c  {
  unsigned int v1:31;
  __tsu64 v2:33;
  unsigned char v3:1;
};
//SIG(1 BFu31i_BFu33_BFu1c) C1{ Fi:31 FL:33 Fc:1}



static void Test_BFu31i_BFu33_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu33_BFu1c");
    static STRUCT_IF_C BFu31i_BFu33_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu1c");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu31i_BFu33_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_BFu1c, BFu31i_BFu33_BFu1c)
//============================================================================


struct  BFu31i_BFu33_BFu1i  {
  unsigned int v1:31;
  __tsu64 v2:33;
  unsigned int v3:1;
};
//SIG(1 BFu31i_BFu33_BFu1i) C1{ Fi:31 FL:33 Fi:1}



static void Test_BFu31i_BFu33_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu33_BFu1i");
    static STRUCT_IF_C BFu31i_BFu33_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu1i");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu31i_BFu33_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_BFu1i, BFu31i_BFu33_BFu1i)
//============================================================================


struct  BFu31i_BFu33_BFu1ll  {
  unsigned int v1:31;
  __tsu64 v2:33;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_BFu33_BFu1ll) C1{ Fi:31 FL:33 FL:1}



static void Test_BFu31i_BFu33_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu33_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu33_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu1ll");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu31i_BFu33_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_BFu1ll, BFu31i_BFu33_BFu1ll)
//============================================================================


struct  BFu31i_BFu33_BFu1s  {
  unsigned int v1:31;
  __tsu64 v2:33;
  unsigned short v3:1;
};
//SIG(1 BFu31i_BFu33_BFu1s) C1{ Fi:31 FL:33 Fs:1}



static void Test_BFu31i_BFu33_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu33_BFu1s");
    static STRUCT_IF_C BFu31i_BFu33_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu1s");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu31i_BFu33_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_BFu1s, BFu31i_BFu33_BFu1s)
//============================================================================


struct  BFu31i_BFu33_BFu31i  {
  unsigned int v1:31;
  __tsu64 v2:33;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFu33_BFu31i) C1{ Fi:31 FL:33 Fi:31}



static void Test_BFu31i_BFu33_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu33_BFu31i");
    static STRUCT_IF_C BFu31i_BFu33_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_BFu31i, BFu31i_BFu33_BFu31i)
//============================================================================


struct  BFu31i_BFu33_BFu31ll  {
  unsigned int v1:31;
  __tsu64 v2:33;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFu33_BFu31ll) C1{ Fi:31 FL:33 FL:31}



static void Test_BFu31i_BFu33_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu33_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu33_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_BFu31ll, BFu31i_BFu33_BFu31ll)
//============================================================================


struct  BFu31i_BFu33_BFu32i  {
  unsigned int v1:31;
  __tsu64 v2:33;
  unsigned int v3:32;
};
//SIG(1 BFu31i_BFu33_BFu32i) C1{ Fi:31 FL:33 Fi:32}



static void Test_BFu31i_BFu33_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu33_BFu32i");
    static STRUCT_IF_C BFu31i_BFu33_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu33_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_BFu32i, BFu31i_BFu33_BFu32i)
//============================================================================


struct  BFu31i_BFu33_BFu32ll  {
  unsigned int v1:31;
  __tsu64 v2:33;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_BFu33_BFu32ll) C1{ Fi:31 FL:33 FL:32}



static void Test_BFu31i_BFu33_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu33_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu33_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu33_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_BFu32ll, BFu31i_BFu33_BFu32ll)
//============================================================================


struct  BFu31i_BFu33_BFu33  {
  unsigned int v1:31;
  __tsu64 v2:33;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_BFu33_BFu33) C1{ Fi:31 FL:33 FL:33}



static void Test_BFu31i_BFu33_BFu33()
{
  {
    init_simple_test("BFu31i_BFu33_BFu33");
    static STRUCT_IF_C BFu31i_BFu33_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu33_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu31i_BFu33_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_BFu33, BFu31i_BFu33_BFu33)
//============================================================================


struct  BFu31i_BFu33_BFu7c  {
  unsigned int v1:31;
  __tsu64 v2:33;
  unsigned char v3:7;
};
//SIG(1 BFu31i_BFu33_BFu7c) C1{ Fi:31 FL:33 Fc:7}



static void Test_BFu31i_BFu33_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu33_BFu7c");
    static STRUCT_IF_C BFu31i_BFu33_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu33_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_BFu7c, BFu31i_BFu33_BFu7c)
//============================================================================


struct  BFu31i_BFu33_BFu7i  {
  unsigned int v1:31;
  __tsu64 v2:33;
  unsigned int v3:7;
};
//SIG(1 BFu31i_BFu33_BFu7i) C1{ Fi:31 FL:33 Fi:7}



static void Test_BFu31i_BFu33_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu33_BFu7i");
    static STRUCT_IF_C BFu31i_BFu33_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu33_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_BFu7i, BFu31i_BFu33_BFu7i)
//============================================================================


struct  BFu31i_BFu33_BFu7ll  {
  unsigned int v1:31;
  __tsu64 v2:33;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_BFu33_BFu7ll) C1{ Fi:31 FL:33 FL:7}



static void Test_BFu31i_BFu33_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu33_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu33_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu33_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_BFu7ll, BFu31i_BFu33_BFu7ll)
//============================================================================


struct  BFu31i_BFu33_BFu7s  {
  unsigned int v1:31;
  __tsu64 v2:33;
  unsigned short v3:7;
};
//SIG(1 BFu31i_BFu33_BFu7s) C1{ Fi:31 FL:33 Fs:7}



static void Test_BFu31i_BFu33_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu33_BFu7s");
    static STRUCT_IF_C BFu31i_BFu33_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu33_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_BFu7s, BFu31i_BFu33_BFu7s)
//============================================================================


struct  BFu31i_BFu33_BFu8c  {
  unsigned int v1:31;
  __tsu64 v2:33;
  unsigned char v3:8;
};
//SIG(1 BFu31i_BFu33_BFu8c) C1{ Fi:31 FL:33 Fc:8}



static void Test_BFu31i_BFu33_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu33_BFu8c");
    static STRUCT_IF_C BFu31i_BFu33_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu33_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_BFu8c, BFu31i_BFu33_BFu8c)
//============================================================================


struct  BFu31i_BFu33_BFu8i  {
  unsigned int v1:31;
  __tsu64 v2:33;
  unsigned int v3:8;
};
//SIG(1 BFu31i_BFu33_BFu8i) C1{ Fi:31 FL:33 Fi:8}



static void Test_BFu31i_BFu33_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu33_BFu8i");
    static STRUCT_IF_C BFu31i_BFu33_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu33_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_BFu8i, BFu31i_BFu33_BFu8i)
//============================================================================


struct  BFu31i_BFu33_BFu8ll  {
  unsigned int v1:31;
  __tsu64 v2:33;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_BFu33_BFu8ll) C1{ Fi:31 FL:33 FL:8}



static void Test_BFu31i_BFu33_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu33_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu33_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu33_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_BFu8ll, BFu31i_BFu33_BFu8ll)
//============================================================================


struct  BFu31i_BFu33_BFu8s  {
  unsigned int v1:31;
  __tsu64 v2:33;
  unsigned short v3:8;
};
//SIG(1 BFu31i_BFu33_BFu8s) C1{ Fi:31 FL:33 Fs:8}



static void Test_BFu31i_BFu33_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu33_BFu8s");
    static STRUCT_IF_C BFu31i_BFu33_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu33_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_BFu8s, BFu31i_BFu33_BFu8s)
//============================================================================


struct  BFu31i_BFu33_BFu9i  {
  unsigned int v1:31;
  __tsu64 v2:33;
  unsigned int v3:9;
};
//SIG(1 BFu31i_BFu33_BFu9i) C1{ Fi:31 FL:33 Fi:9}



static void Test_BFu31i_BFu33_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu33_BFu9i");
    static STRUCT_IF_C BFu31i_BFu33_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31i_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu33_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_BFu9i, BFu31i_BFu33_BFu9i)
//============================================================================


struct  BFu31i_BFu33_BFu9ll  {
  unsigned int v1:31;
  __tsu64 v2:33;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_BFu33_BFu9ll) C1{ Fi:31 FL:33 FL:9}



static void Test_BFu31i_BFu33_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu33_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu33_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31i_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu33_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_BFu9ll, BFu31i_BFu33_BFu9ll)
//============================================================================


struct  BFu31i_BFu33_BFu9s  {
  unsigned int v1:31;
  __tsu64 v2:33;
  unsigned short v3:9;
};
//SIG(1 BFu31i_BFu33_BFu9s) C1{ Fi:31 FL:33 Fs:9}



static void Test_BFu31i_BFu33_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu33_BFu9s");
    static STRUCT_IF_C BFu31i_BFu33_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31i_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu33_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_BFu9s, BFu31i_BFu33_BFu9s)
//============================================================================


struct  BFu31i_BFu33_C  {
  unsigned int v1:31;
  __tsu64 v2:33;
  char v3;
};
//SIG(1 BFu31i_BFu33_C) C1{ Fi:31 FL:33 Fc}



static void Test_BFu31i_BFu33_C()
{
  {
    init_simple_test("BFu31i_BFu33_C");
    static STRUCT_IF_C BFu31i_BFu33_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_C");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_C");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_C");
    check_field_offset(lv, v3, 8, "BFu31i_BFu33_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_C, BFu31i_BFu33_C)
//============================================================================


struct  BFu31i_BFu33_D  {
  unsigned int v1:31;
  __tsu64 v2:33;
  double v3;
};
//SIG(1 BFu31i_BFu33_D) C1{ Fi:31 FL:33 FL}



static void Test_BFu31i_BFu33_D()
{
  {
    init_simple_test("BFu31i_BFu33_D");
    static STRUCT_IF_C BFu31i_BFu33_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu33_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_D");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_D");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_D");
    check_field_offset(lv, v3, 8, "BFu31i_BFu33_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_D, BFu31i_BFu33_D)
//============================================================================


struct  BFu31i_BFu33_F  {
  unsigned int v1:31;
  __tsu64 v2:33;
  float v3;
};
//SIG(1 BFu31i_BFu33_F) C1{ Fi:31 FL:33 Fi}



static void Test_BFu31i_BFu33_F()
{
  {
    init_simple_test("BFu31i_BFu33_F");
    static STRUCT_IF_C BFu31i_BFu33_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_F");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_F");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_F");
    check_field_offset(lv, v3, 8, "BFu31i_BFu33_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_F, BFu31i_BFu33_F)
//============================================================================


struct  BFu31i_BFu33_I  {
  unsigned int v1:31;
  __tsu64 v2:33;
  int v3;
};
//SIG(1 BFu31i_BFu33_I) C1{ Fi:31 FL:33 Fi}



static void Test_BFu31i_BFu33_I()
{
  {
    init_simple_test("BFu31i_BFu33_I");
    static STRUCT_IF_C BFu31i_BFu33_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_I");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_I");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_I");
    check_field_offset(lv, v3, 8, "BFu31i_BFu33_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_I, BFu31i_BFu33_I)
//============================================================================


struct  BFu31i_BFu33_Ip  {
  unsigned int v1:31;
  __tsu64 v2:33;
  int *v3;
};
//SIG(1 BFu31i_BFu33_Ip) C1{ Fi:31 FL:33 Fp}



static void Test_BFu31i_BFu33_Ip()
{
  {
    init_simple_test("BFu31i_BFu33_Ip");
    static STRUCT_IF_C BFu31i_BFu33_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_Ip");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_Ip");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_Ip");
    check_field_offset(lv, v3, 8, "BFu31i_BFu33_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_Ip, BFu31i_BFu33_Ip)
//============================================================================


struct  BFu31i_BFu33_L  {
  unsigned int v1:31;
  __tsu64 v2:33;
  __tsi64 v3;
};
//SIG(1 BFu31i_BFu33_L) C1{ Fi:31 FL:33 FL}



static void Test_BFu31i_BFu33_L()
{
  {
    init_simple_test("BFu31i_BFu33_L");
    static STRUCT_IF_C BFu31i_BFu33_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu33_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_L");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_L");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_L");
    check_field_offset(lv, v3, 8, "BFu31i_BFu33_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_L, BFu31i_BFu33_L)
//============================================================================


struct  BFu31i_BFu33_S  {
  unsigned int v1:31;
  __tsu64 v2:33;
  short v3;
};
//SIG(1 BFu31i_BFu33_S) C1{ Fi:31 FL:33 Fs}



static void Test_BFu31i_BFu33_S()
{
  {
    init_simple_test("BFu31i_BFu33_S");
    static STRUCT_IF_C BFu31i_BFu33_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_S");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_S");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_S");
    check_field_offset(lv, v3, 8, "BFu31i_BFu33_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_S, BFu31i_BFu33_S)
//============================================================================


struct  BFu31i_BFu33_Uc  {
  unsigned int v1:31;
  __tsu64 v2:33;
  unsigned char v3;
};
//SIG(1 BFu31i_BFu33_Uc) C1{ Fi:31 FL:33 Fc}



static void Test_BFu31i_BFu33_Uc()
{
  {
    init_simple_test("BFu31i_BFu33_Uc");
    static STRUCT_IF_C BFu31i_BFu33_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_Uc");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_Uc");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_Uc");
    check_field_offset(lv, v3, 8, "BFu31i_BFu33_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_Uc, BFu31i_BFu33_Uc)
//============================================================================


struct  BFu31i_BFu33_Ui  {
  unsigned int v1:31;
  __tsu64 v2:33;
  unsigned int v3;
};
//SIG(1 BFu31i_BFu33_Ui) C1{ Fi:31 FL:33 Fi}



static void Test_BFu31i_BFu33_Ui()
{
  {
    init_simple_test("BFu31i_BFu33_Ui");
    static STRUCT_IF_C BFu31i_BFu33_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_Ui");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_Ui");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_Ui");
    check_field_offset(lv, v3, 8, "BFu31i_BFu33_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_Ui, BFu31i_BFu33_Ui)
//============================================================================


struct  BFu31i_BFu33_Ul  {
  unsigned int v1:31;
  __tsu64 v2:33;
  __tsu64 v3;
};
//SIG(1 BFu31i_BFu33_Ul) C1{ Fi:31 FL:33 FL}



static void Test_BFu31i_BFu33_Ul()
{
  {
    init_simple_test("BFu31i_BFu33_Ul");
    static STRUCT_IF_C BFu31i_BFu33_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu33_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_Ul");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_Ul");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_Ul");
    check_field_offset(lv, v3, 8, "BFu31i_BFu33_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_Ul, BFu31i_BFu33_Ul)
//============================================================================


struct  BFu31i_BFu33_Us  {
  unsigned int v1:31;
  __tsu64 v2:33;
  unsigned short v3;
};
//SIG(1 BFu31i_BFu33_Us) C1{ Fi:31 FL:33 Fs}



static void Test_BFu31i_BFu33_Us()
{
  {
    init_simple_test("BFu31i_BFu33_Us");
    static STRUCT_IF_C BFu31i_BFu33_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_Us");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_Us");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_Us");
    check_field_offset(lv, v3, 8, "BFu31i_BFu33_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_Us, BFu31i_BFu33_Us)
//============================================================================


struct  BFu31i_BFu33_Vp  {
  unsigned int v1:31;
  __tsu64 v2:33;
  void *v3;
};
//SIG(1 BFu31i_BFu33_Vp) C1{ Fi:31 FL:33 Fp}



static void Test_BFu31i_BFu33_Vp()
{
  {
    init_simple_test("BFu31i_BFu33_Vp");
    static STRUCT_IF_C BFu31i_BFu33_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_Vp");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_Vp");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_Vp");
    check_field_offset(lv, v3, 8, "BFu31i_BFu33_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu33_Vp, BFu31i_BFu33_Vp)
//============================================================================


struct  BFu31i_BFu7c  {
  unsigned int v1:31;
  unsigned char v2:7;
};
//SIG(1 BFu31i_BFu7c) C1{ Fi:31 Fc:7}



static void Test_BFu31i_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu7c");
    static STRUCT_IF_C BFu31i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c, BFu31i_BFu7c)
//============================================================================


struct  BFu31i_BFu7c_BFu15i  {
  unsigned int v1:31;
  unsigned char v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu31i_BFu7c_BFu15i) C1{ Fi:31 Fc:7 Fi:15}



static void Test_BFu31i_BFu7c_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu7c_BFu15i");
    static STRUCT_IF_C BFu31i_BFu7c_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 4, 7, 15, 1, "BFu31i_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 4, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu7c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_BFu15i, BFu31i_BFu7c_BFu15i)
//============================================================================


struct  BFu31i_BFu7c_BFu15ll  {
  unsigned int v1:31;
  unsigned char v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_BFu7c_BFu15ll) C1{ Fi:31 Fc:7 FL:15}



static void Test_BFu31i_BFu7c_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu7c_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu7c_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 4, 7, 15, 1, "BFu31i_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 4, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu7c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_BFu15ll, BFu31i_BFu7c_BFu15ll)
//============================================================================


struct  BFu31i_BFu7c_BFu15s  {
  unsigned int v1:31;
  unsigned char v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu31i_BFu7c_BFu15s) C1{ Fi:31 Fc:7 Fs:15}



static void Test_BFu31i_BFu7c_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu7c_BFu15s");
    static STRUCT_IF_C BFu31i_BFu7c_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu7c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_BFu15s, BFu31i_BFu7c_BFu15s)
//============================================================================


struct  BFu31i_BFu7c_BFu16i  {
  unsigned int v1:31;
  unsigned char v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu31i_BFu7c_BFu16i) C1{ Fi:31 Fc:7 Fi:16}



static void Test_BFu31i_BFu7c_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu7c_BFu16i");
    static STRUCT_IF_C BFu31i_BFu7c_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 4, 7, 16, 1, "BFu31i_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 4, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu7c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_BFu16i, BFu31i_BFu7c_BFu16i)
//============================================================================


struct  BFu31i_BFu7c_BFu16ll  {
  unsigned int v1:31;
  unsigned char v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_BFu7c_BFu16ll) C1{ Fi:31 Fc:7 FL:16}



static void Test_BFu31i_BFu7c_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu7c_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu7c_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 4, 7, 16, 1, "BFu31i_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 4, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu7c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_BFu16ll, BFu31i_BFu7c_BFu16ll)
//============================================================================


struct  BFu31i_BFu7c_BFu16s  {
  unsigned int v1:31;
  unsigned char v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu31i_BFu7c_BFu16s) C1{ Fi:31 Fc:7 Fs:16}



static void Test_BFu31i_BFu7c_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu7c_BFu16s");
    static STRUCT_IF_C BFu31i_BFu7c_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu7c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_BFu16s, BFu31i_BFu7c_BFu16s)
//============================================================================


struct  BFu31i_BFu7c_BFu17i  {
  unsigned int v1:31;
  unsigned char v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu31i_BFu7c_BFu17i) C1{ Fi:31 Fc:7 Fi:17}



static void Test_BFu31i_BFu7c_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu7c_BFu17i");
    static STRUCT_IF_C BFu31i_BFu7c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 4, 7, 17, 1, "BFu31i_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 4, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu7c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_BFu17i, BFu31i_BFu7c_BFu17i)
//============================================================================


struct  BFu31i_BFu7c_BFu17ll  {
  unsigned int v1:31;
  unsigned char v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_BFu7c_BFu17ll) C1{ Fi:31 Fc:7 FL:17}



static void Test_BFu31i_BFu7c_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu7c_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu7c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 4, 7, 17, 1, "BFu31i_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 4, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu7c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_BFu17ll, BFu31i_BFu7c_BFu17ll)
//============================================================================


struct  BFu31i_BFu7c_BFu1c  {
  unsigned int v1:31;
  unsigned char v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu31i_BFu7c_BFu1c) C1{ Fi:31 Fc:7 Fc:1}



static void Test_BFu31i_BFu7c_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu7c_BFu1c");
    static STRUCT_IF_C BFu31i_BFu7c_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu1c");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu31i_BFu7c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_BFu1c, BFu31i_BFu7c_BFu1c)
//============================================================================


struct  BFu31i_BFu7c_BFu1i  {
  unsigned int v1:31;
  unsigned char v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu31i_BFu7c_BFu1i) C1{ Fi:31 Fc:7 Fi:1}



static void Test_BFu31i_BFu7c_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu7c_BFu1i");
    static STRUCT_IF_C BFu31i_BFu7c_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu1i");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu31i_BFu7c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_BFu1i, BFu31i_BFu7c_BFu1i)
//============================================================================


struct  BFu31i_BFu7c_BFu1ll  {
  unsigned int v1:31;
  unsigned char v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_BFu7c_BFu1ll) C1{ Fi:31 Fc:7 FL:1}



static void Test_BFu31i_BFu7c_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu7c_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu7c_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu1ll");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu31i_BFu7c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_BFu1ll, BFu31i_BFu7c_BFu1ll)
//============================================================================


struct  BFu31i_BFu7c_BFu1s  {
  unsigned int v1:31;
  unsigned char v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu31i_BFu7c_BFu1s) C1{ Fi:31 Fc:7 Fs:1}



static void Test_BFu31i_BFu7c_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu7c_BFu1s");
    static STRUCT_IF_C BFu31i_BFu7c_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu1s");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu31i_BFu7c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_BFu1s, BFu31i_BFu7c_BFu1s)
//============================================================================


struct  BFu31i_BFu7c_BFu31i  {
  unsigned int v1:31;
  unsigned char v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFu7c_BFu31i) C1{ Fi:31 Fc:7 Fi:31}



static void Test_BFu31i_BFu7c_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu7c_BFu31i");
    static STRUCT_IF_C BFu31i_BFu7c_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu7c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_BFu31i, BFu31i_BFu7c_BFu31i)
//============================================================================


struct  BFu31i_BFu7c_BFu31ll  {
  unsigned int v1:31;
  unsigned char v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFu7c_BFu31ll) C1{ Fi:31 Fc:7 FL:31}



static void Test_BFu31i_BFu7c_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu7c_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu7c_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu7c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 31, 1, "BFu31i_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_BFu31ll, BFu31i_BFu7c_BFu31ll)
//============================================================================


struct  BFu31i_BFu7c_BFu32i  {
  unsigned int v1:31;
  unsigned char v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu31i_BFu7c_BFu32i) C1{ Fi:31 Fc:7 Fi:32}



static void Test_BFu31i_BFu7c_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu7c_BFu32i");
    static STRUCT_IF_C BFu31i_BFu7c_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu7c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu7c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_BFu32i, BFu31i_BFu7c_BFu32i)
//============================================================================


struct  BFu31i_BFu7c_BFu32ll  {
  unsigned int v1:31;
  unsigned char v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_BFu7c_BFu32ll) C1{ Fi:31 Fc:7 FL:32}



static void Test_BFu31i_BFu7c_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu7c_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu7c_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu7c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 32, 1, "BFu31i_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu31i_BFu7c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_BFu32ll, BFu31i_BFu7c_BFu32ll)
//============================================================================


struct  BFu31i_BFu7c_BFu33  {
  unsigned int v1:31;
  unsigned char v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_BFu7c_BFu33) C1{ Fi:31 Fc:7 FL:33}



static void Test_BFu31i_BFu7c_BFu33()
{
  {
    init_simple_test("BFu31i_BFu7c_BFu33");
    static STRUCT_IF_C BFu31i_BFu7c_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu7c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 33, 1, "BFu31i_BFu7c_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu31i_BFu7c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_BFu33, BFu31i_BFu7c_BFu33)
//============================================================================


struct  BFu31i_BFu7c_BFu7c  {
  unsigned int v1:31;
  unsigned char v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu31i_BFu7c_BFu7c) C1{ Fi:31 Fc:7 Fc:7}



static void Test_BFu31i_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu7c_BFu7c");
    static STRUCT_IF_C BFu31i_BFu7c_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_BFu7c, BFu31i_BFu7c_BFu7c)
//============================================================================


struct  BFu31i_BFu7c_BFu7i  {
  unsigned int v1:31;
  unsigned char v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu31i_BFu7c_BFu7i) C1{ Fi:31 Fc:7 Fi:7}



static void Test_BFu31i_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu7c_BFu7i");
    static STRUCT_IF_C BFu31i_BFu7c_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "BFu31i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_BFu7i, BFu31i_BFu7c_BFu7i)
//============================================================================


struct  BFu31i_BFu7c_BFu7ll  {
  unsigned int v1:31;
  unsigned char v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_BFu7c_BFu7ll) C1{ Fi:31 Fc:7 FL:7}



static void Test_BFu31i_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu7c_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "BFu31i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_BFu7ll, BFu31i_BFu7c_BFu7ll)
//============================================================================


struct  BFu31i_BFu7c_BFu7s  {
  unsigned int v1:31;
  unsigned char v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu31i_BFu7c_BFu7s) C1{ Fi:31 Fc:7 Fs:7}



static void Test_BFu31i_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu7c_BFu7s");
    static STRUCT_IF_C BFu31i_BFu7c_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "BFu31i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_BFu7s, BFu31i_BFu7c_BFu7s)
//============================================================================


struct  BFu31i_BFu7c_BFu8c  {
  unsigned int v1:31;
  unsigned char v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu31i_BFu7c_BFu8c) C1{ Fi:31 Fc:7 Fc:8}



static void Test_BFu31i_BFu7c_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu7c_BFu8c");
    static STRUCT_IF_C BFu31i_BFu7c_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu7c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_BFu8c, BFu31i_BFu7c_BFu8c)
//============================================================================


struct  BFu31i_BFu7c_BFu8i  {
  unsigned int v1:31;
  unsigned char v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu31i_BFu7c_BFu8i) C1{ Fi:31 Fc:7 Fi:8}



static void Test_BFu31i_BFu7c_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu7c_BFu8i");
    static STRUCT_IF_C BFu31i_BFu7c_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "BFu31i_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu7c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_BFu8i, BFu31i_BFu7c_BFu8i)
//============================================================================


struct  BFu31i_BFu7c_BFu8ll  {
  unsigned int v1:31;
  unsigned char v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_BFu7c_BFu8ll) C1{ Fi:31 Fc:7 FL:8}



static void Test_BFu31i_BFu7c_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu7c_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu7c_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "BFu31i_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu7c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_BFu8ll, BFu31i_BFu7c_BFu8ll)
//============================================================================


struct  BFu31i_BFu7c_BFu8s  {
  unsigned int v1:31;
  unsigned char v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu31i_BFu7c_BFu8s) C1{ Fi:31 Fc:7 Fs:8}



static void Test_BFu31i_BFu7c_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu7c_BFu8s");
    static STRUCT_IF_C BFu31i_BFu7c_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "BFu31i_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu7c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_BFu8s, BFu31i_BFu7c_BFu8s)
//============================================================================


struct  BFu31i_BFu7c_BFu9i  {
  unsigned int v1:31;
  unsigned char v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu31i_BFu7c_BFu9i) C1{ Fi:31 Fc:7 Fi:9}



static void Test_BFu31i_BFu7c_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu7c_BFu9i");
    static STRUCT_IF_C BFu31i_BFu7c_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "BFu31i_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu7c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_BFu9i, BFu31i_BFu7c_BFu9i)
//============================================================================


struct  BFu31i_BFu7c_BFu9ll  {
  unsigned int v1:31;
  unsigned char v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_BFu7c_BFu9ll) C1{ Fi:31 Fc:7 FL:9}



static void Test_BFu31i_BFu7c_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu7c_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu7c_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "BFu31i_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu7c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_BFu9ll, BFu31i_BFu7c_BFu9ll)
//============================================================================


struct  BFu31i_BFu7c_BFu9s  {
  unsigned int v1:31;
  unsigned char v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu31i_BFu7c_BFu9s) C1{ Fi:31 Fc:7 Fs:9}



static void Test_BFu31i_BFu7c_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu7c_BFu9s");
    static STRUCT_IF_C BFu31i_BFu7c_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "BFu31i_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu7c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_BFu9s, BFu31i_BFu7c_BFu9s)
//============================================================================


struct  BFu31i_BFu7c_C  {
  unsigned int v1:31;
  unsigned char v2:7;
  char v3;
};
//SIG(1 BFu31i_BFu7c_C) C1{ Fi:31 Fc:7 Fc}



static void Test_BFu31i_BFu7c_C()
{
  {
    init_simple_test("BFu31i_BFu7c_C");
    static STRUCT_IF_C BFu31i_BFu7c_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7c_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_C");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_C");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_C");
    check_field_offset(lv, v3, 5, "BFu31i_BFu7c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_C, BFu31i_BFu7c_C)
//============================================================================


struct  BFu31i_BFu7c_D  {
  unsigned int v1:31;
  unsigned char v2:7;
  double v3;
};
//SIG(1 BFu31i_BFu7c_D) C1{ Fi:31 Fc:7 FL}



static void Test_BFu31i_BFu7c_D()
{
  {
    init_simple_test("BFu31i_BFu7c_D");
    static STRUCT_IF_C BFu31i_BFu7c_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu7c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7c_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_D");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_D");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_D");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_D, BFu31i_BFu7c_D)
//============================================================================


struct  BFu31i_BFu7c_F  {
  unsigned int v1:31;
  unsigned char v2:7;
  float v3;
};
//SIG(1 BFu31i_BFu7c_F) C1{ Fi:31 Fc:7 Fi}



static void Test_BFu31i_BFu7c_F()
{
  {
    init_simple_test("BFu31i_BFu7c_F");
    static STRUCT_IF_C BFu31i_BFu7c_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu7c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7c_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_F");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_F");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_F");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_F, BFu31i_BFu7c_F)
//============================================================================


struct  BFu31i_BFu7c_I  {
  unsigned int v1:31;
  unsigned char v2:7;
  int v3;
};
//SIG(1 BFu31i_BFu7c_I) C1{ Fi:31 Fc:7 Fi}



static void Test_BFu31i_BFu7c_I()
{
  {
    init_simple_test("BFu31i_BFu7c_I");
    static STRUCT_IF_C BFu31i_BFu7c_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu7c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7c_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_I");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_I");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_I");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_I, BFu31i_BFu7c_I)
//============================================================================


struct  BFu31i_BFu7c_Ip  {
  unsigned int v1:31;
  unsigned char v2:7;
  int *v3;
};
//SIG(1 BFu31i_BFu7c_Ip) C1{ Fi:31 Fc:7 Fp}



static void Test_BFu31i_BFu7c_Ip()
{
  {
    init_simple_test("BFu31i_BFu7c_Ip");
    static STRUCT_IF_C BFu31i_BFu7c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu7c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_Ip");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_Ip");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_Ip");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_Ip, BFu31i_BFu7c_Ip)
//============================================================================


struct  BFu31i_BFu7c_L  {
  unsigned int v1:31;
  unsigned char v2:7;
  __tsi64 v3;
};
//SIG(1 BFu31i_BFu7c_L) C1{ Fi:31 Fc:7 FL}



static void Test_BFu31i_BFu7c_L()
{
  {
    init_simple_test("BFu31i_BFu7c_L");
    static STRUCT_IF_C BFu31i_BFu7c_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu7c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7c_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_L");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_L");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_L");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_L, BFu31i_BFu7c_L)
//============================================================================


struct  BFu31i_BFu7c_S  {
  unsigned int v1:31;
  unsigned char v2:7;
  short v3;
};
//SIG(1 BFu31i_BFu7c_S) C1{ Fi:31 Fc:7 Fs}



static void Test_BFu31i_BFu7c_S()
{
  {
    init_simple_test("BFu31i_BFu7c_S");
    static STRUCT_IF_C BFu31i_BFu7c_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7c_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_S");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_S");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_S");
    check_field_offset(lv, v3, 6, "BFu31i_BFu7c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_S, BFu31i_BFu7c_S)
//============================================================================


struct  BFu31i_BFu7c_Uc  {
  unsigned int v1:31;
  unsigned char v2:7;
  unsigned char v3;
};
//SIG(1 BFu31i_BFu7c_Uc) C1{ Fi:31 Fc:7 Fc}



static void Test_BFu31i_BFu7c_Uc()
{
  {
    init_simple_test("BFu31i_BFu7c_Uc");
    static STRUCT_IF_C BFu31i_BFu7c_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_Uc");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_Uc");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_Uc");
    check_field_offset(lv, v3, 5, "BFu31i_BFu7c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_Uc, BFu31i_BFu7c_Uc)
//============================================================================


struct  BFu31i_BFu7c_Ui  {
  unsigned int v1:31;
  unsigned char v2:7;
  unsigned int v3;
};
//SIG(1 BFu31i_BFu7c_Ui) C1{ Fi:31 Fc:7 Fi}



static void Test_BFu31i_BFu7c_Ui()
{
  {
    init_simple_test("BFu31i_BFu7c_Ui");
    static STRUCT_IF_C BFu31i_BFu7c_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu7c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_Ui");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_Ui");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_Ui");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_Ui, BFu31i_BFu7c_Ui)
//============================================================================


struct  BFu31i_BFu7c_Ul  {
  unsigned int v1:31;
  unsigned char v2:7;
  __tsu64 v3;
};
//SIG(1 BFu31i_BFu7c_Ul) C1{ Fi:31 Fc:7 FL}



static void Test_BFu31i_BFu7c_Ul()
{
  {
    init_simple_test("BFu31i_BFu7c_Ul");
    static STRUCT_IF_C BFu31i_BFu7c_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu7c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_Ul");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_Ul");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_Ul");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_Ul, BFu31i_BFu7c_Ul)
//============================================================================


struct  BFu31i_BFu7c_Us  {
  unsigned int v1:31;
  unsigned char v2:7;
  unsigned short v3;
};
//SIG(1 BFu31i_BFu7c_Us) C1{ Fi:31 Fc:7 Fs}



static void Test_BFu31i_BFu7c_Us()
{
  {
    init_simple_test("BFu31i_BFu7c_Us");
    static STRUCT_IF_C BFu31i_BFu7c_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_Us");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_Us");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_Us");
    check_field_offset(lv, v3, 6, "BFu31i_BFu7c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_Us, BFu31i_BFu7c_Us)
//============================================================================


struct  BFu31i_BFu7c_Vp  {
  unsigned int v1:31;
  unsigned char v2:7;
  void *v3;
};
//SIG(1 BFu31i_BFu7c_Vp) C1{ Fi:31 Fc:7 Fp}



static void Test_BFu31i_BFu7c_Vp()
{
  {
    init_simple_test("BFu31i_BFu7c_Vp");
    static STRUCT_IF_C BFu31i_BFu7c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu7c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_Vp");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_Vp");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_Vp");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7c_Vp, BFu31i_BFu7c_Vp)
//============================================================================


struct  BFu31i_BFu7i  {
  unsigned int v1:31;
  unsigned int v2:7;
};
//SIG(1 BFu31i_BFu7i) C1{ Fi:31 Fi:7}



static void Test_BFu31i_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu7i");
    static STRUCT_IF_C BFu31i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i, BFu31i_BFu7i)
//============================================================================


struct  BFu31i_BFu7i_BFu15i  {
  unsigned int v1:31;
  unsigned int v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu31i_BFu7i_BFu15i) C1{ Fi:31 Fi:7 Fi:15}



static void Test_BFu31i_BFu7i_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu7i_BFu15i");
    static STRUCT_IF_C BFu31i_BFu7i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 4, 7, 15, 1, "BFu31i_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 4, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu7i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_BFu15i, BFu31i_BFu7i_BFu15i)
//============================================================================


struct  BFu31i_BFu7i_BFu15ll  {
  unsigned int v1:31;
  unsigned int v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_BFu7i_BFu15ll) C1{ Fi:31 Fi:7 FL:15}



static void Test_BFu31i_BFu7i_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu7i_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu7i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 7, 15, 1, "BFu31i_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu7i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_BFu15ll, BFu31i_BFu7i_BFu15ll)
//============================================================================


struct  BFu31i_BFu7i_BFu15s  {
  unsigned int v1:31;
  unsigned int v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu31i_BFu7i_BFu15s) C1{ Fi:31 Fi:7 Fs:15}



static void Test_BFu31i_BFu7i_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu7i_BFu15s");
    static STRUCT_IF_C BFu31i_BFu7i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu7i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_BFu15s, BFu31i_BFu7i_BFu15s)
//============================================================================


struct  BFu31i_BFu7i_BFu16i  {
  unsigned int v1:31;
  unsigned int v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu31i_BFu7i_BFu16i) C1{ Fi:31 Fi:7 Fi:16}



static void Test_BFu31i_BFu7i_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu7i_BFu16i");
    static STRUCT_IF_C BFu31i_BFu7i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 4, 7, 16, 1, "BFu31i_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 4, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu7i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_BFu16i, BFu31i_BFu7i_BFu16i)
//============================================================================


struct  BFu31i_BFu7i_BFu16ll  {
  unsigned int v1:31;
  unsigned int v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_BFu7i_BFu16ll) C1{ Fi:31 Fi:7 FL:16}



static void Test_BFu31i_BFu7i_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu7i_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu7i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 7, 16, 1, "BFu31i_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu7i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_BFu16ll, BFu31i_BFu7i_BFu16ll)
//============================================================================


struct  BFu31i_BFu7i_BFu16s  {
  unsigned int v1:31;
  unsigned int v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu31i_BFu7i_BFu16s) C1{ Fi:31 Fi:7 Fs:16}



static void Test_BFu31i_BFu7i_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu7i_BFu16s");
    static STRUCT_IF_C BFu31i_BFu7i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu7i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_BFu16s, BFu31i_BFu7i_BFu16s)
//============================================================================


struct  BFu31i_BFu7i_BFu17i  {
  unsigned int v1:31;
  unsigned int v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu31i_BFu7i_BFu17i) C1{ Fi:31 Fi:7 Fi:17}



static void Test_BFu31i_BFu7i_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu7i_BFu17i");
    static STRUCT_IF_C BFu31i_BFu7i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 4, 7, 17, 1, "BFu31i_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 4, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu7i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_BFu17i, BFu31i_BFu7i_BFu17i)
//============================================================================


struct  BFu31i_BFu7i_BFu17ll  {
  unsigned int v1:31;
  unsigned int v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_BFu7i_BFu17ll) C1{ Fi:31 Fi:7 FL:17}



static void Test_BFu31i_BFu7i_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu7i_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu7i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 7, 17, 1, "BFu31i_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu7i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_BFu17ll, BFu31i_BFu7i_BFu17ll)
//============================================================================


struct  BFu31i_BFu7i_BFu1c  {
  unsigned int v1:31;
  unsigned int v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu31i_BFu7i_BFu1c) C1{ Fi:31 Fi:7 Fc:1}



static void Test_BFu31i_BFu7i_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu7i_BFu1c");
    static STRUCT_IF_C BFu31i_BFu7i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu1c");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu31i_BFu7i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_BFu1c, BFu31i_BFu7i_BFu1c)
//============================================================================


struct  BFu31i_BFu7i_BFu1i  {
  unsigned int v1:31;
  unsigned int v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu31i_BFu7i_BFu1i) C1{ Fi:31 Fi:7 Fi:1}



static void Test_BFu31i_BFu7i_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu7i_BFu1i");
    static STRUCT_IF_C BFu31i_BFu7i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu1i");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu31i_BFu7i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_BFu1i, BFu31i_BFu7i_BFu1i)
//============================================================================


struct  BFu31i_BFu7i_BFu1ll  {
  unsigned int v1:31;
  unsigned int v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_BFu7i_BFu1ll) C1{ Fi:31 Fi:7 FL:1}



static void Test_BFu31i_BFu7i_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu7i_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu7i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu1ll");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu31i_BFu7i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_BFu1ll, BFu31i_BFu7i_BFu1ll)
//============================================================================


struct  BFu31i_BFu7i_BFu1s  {
  unsigned int v1:31;
  unsigned int v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu31i_BFu7i_BFu1s) C1{ Fi:31 Fi:7 Fs:1}



static void Test_BFu31i_BFu7i_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu7i_BFu1s");
    static STRUCT_IF_C BFu31i_BFu7i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu1s");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu31i_BFu7i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_BFu1s, BFu31i_BFu7i_BFu1s)
//============================================================================


struct  BFu31i_BFu7i_BFu31i  {
  unsigned int v1:31;
  unsigned int v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFu7i_BFu31i) C1{ Fi:31 Fi:7 Fi:31}



static void Test_BFu31i_BFu7i_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu7i_BFu31i");
    static STRUCT_IF_C BFu31i_BFu7i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu7i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu7i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_BFu31i, BFu31i_BFu7i_BFu31i)
//============================================================================


struct  BFu31i_BFu7i_BFu31ll  {
  unsigned int v1:31;
  unsigned int v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFu7i_BFu31ll) C1{ Fi:31 Fi:7 FL:31}



static void Test_BFu31i_BFu7i_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu7i_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu7i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu7i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 31, 1, "BFu31i_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_BFu31ll, BFu31i_BFu7i_BFu31ll)
//============================================================================


struct  BFu31i_BFu7i_BFu32i  {
  unsigned int v1:31;
  unsigned int v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu31i_BFu7i_BFu32i) C1{ Fi:31 Fi:7 Fi:32}



static void Test_BFu31i_BFu7i_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu7i_BFu32i");
    static STRUCT_IF_C BFu31i_BFu7i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu7i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_BFu7i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu7i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_BFu32i, BFu31i_BFu7i_BFu32i)
//============================================================================


struct  BFu31i_BFu7i_BFu32ll  {
  unsigned int v1:31;
  unsigned int v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_BFu7i_BFu32ll) C1{ Fi:31 Fi:7 FL:32}



static void Test_BFu31i_BFu7i_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu7i_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu7i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu7i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 32, 1, "BFu31i_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu31i_BFu7i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_BFu32ll, BFu31i_BFu7i_BFu32ll)
//============================================================================


struct  BFu31i_BFu7i_BFu33  {
  unsigned int v1:31;
  unsigned int v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_BFu7i_BFu33) C1{ Fi:31 Fi:7 FL:33}



static void Test_BFu31i_BFu7i_BFu33()
{
  {
    init_simple_test("BFu31i_BFu7i_BFu33");
    static STRUCT_IF_C BFu31i_BFu7i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu7i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 33, 1, "BFu31i_BFu7i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu31i_BFu7i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_BFu33, BFu31i_BFu7i_BFu33)
//============================================================================


struct  BFu31i_BFu7i_BFu7c  {
  unsigned int v1:31;
  unsigned int v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu31i_BFu7i_BFu7c) C1{ Fi:31 Fi:7 Fc:7}



static void Test_BFu31i_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu7i_BFu7c");
    static STRUCT_IF_C BFu31i_BFu7i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_BFu7c, BFu31i_BFu7i_BFu7c)
//============================================================================


struct  BFu31i_BFu7i_BFu7i  {
  unsigned int v1:31;
  unsigned int v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu31i_BFu7i_BFu7i) C1{ Fi:31 Fi:7 Fi:7}



static void Test_BFu31i_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu7i_BFu7i");
    static STRUCT_IF_C BFu31i_BFu7i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "BFu31i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_BFu7i, BFu31i_BFu7i_BFu7i)
//============================================================================


struct  BFu31i_BFu7i_BFu7ll  {
  unsigned int v1:31;
  unsigned int v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_BFu7i_BFu7ll) C1{ Fi:31 Fi:7 FL:7}



static void Test_BFu31i_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu7i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "BFu31i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_BFu7ll, BFu31i_BFu7i_BFu7ll)
//============================================================================


struct  BFu31i_BFu7i_BFu7s  {
  unsigned int v1:31;
  unsigned int v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu31i_BFu7i_BFu7s) C1{ Fi:31 Fi:7 Fs:7}



static void Test_BFu31i_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu7i_BFu7s");
    static STRUCT_IF_C BFu31i_BFu7i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "BFu31i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_BFu7s, BFu31i_BFu7i_BFu7s)
//============================================================================


struct  BFu31i_BFu7i_BFu8c  {
  unsigned int v1:31;
  unsigned int v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu31i_BFu7i_BFu8c) C1{ Fi:31 Fi:7 Fc:8}



static void Test_BFu31i_BFu7i_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu7i_BFu8c");
    static STRUCT_IF_C BFu31i_BFu7i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu7i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_BFu8c, BFu31i_BFu7i_BFu8c)
//============================================================================


struct  BFu31i_BFu7i_BFu8i  {
  unsigned int v1:31;
  unsigned int v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu31i_BFu7i_BFu8i) C1{ Fi:31 Fi:7 Fi:8}



static void Test_BFu31i_BFu7i_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu7i_BFu8i");
    static STRUCT_IF_C BFu31i_BFu7i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "BFu31i_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu7i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_BFu8i, BFu31i_BFu7i_BFu8i)
//============================================================================


struct  BFu31i_BFu7i_BFu8ll  {
  unsigned int v1:31;
  unsigned int v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_BFu7i_BFu8ll) C1{ Fi:31 Fi:7 FL:8}



static void Test_BFu31i_BFu7i_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu7i_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu7i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "BFu31i_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu7i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_BFu8ll, BFu31i_BFu7i_BFu8ll)
//============================================================================


struct  BFu31i_BFu7i_BFu8s  {
  unsigned int v1:31;
  unsigned int v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu31i_BFu7i_BFu8s) C1{ Fi:31 Fi:7 Fs:8}



static void Test_BFu31i_BFu7i_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu7i_BFu8s");
    static STRUCT_IF_C BFu31i_BFu7i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "BFu31i_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu7i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_BFu8s, BFu31i_BFu7i_BFu8s)
//============================================================================


struct  BFu31i_BFu7i_BFu9i  {
  unsigned int v1:31;
  unsigned int v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu31i_BFu7i_BFu9i) C1{ Fi:31 Fi:7 Fi:9}



static void Test_BFu31i_BFu7i_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu7i_BFu9i");
    static STRUCT_IF_C BFu31i_BFu7i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "BFu31i_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu7i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_BFu9i, BFu31i_BFu7i_BFu9i)
//============================================================================


struct  BFu31i_BFu7i_BFu9ll  {
  unsigned int v1:31;
  unsigned int v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_BFu7i_BFu9ll) C1{ Fi:31 Fi:7 FL:9}



static void Test_BFu31i_BFu7i_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu7i_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu7i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "BFu31i_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu7i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_BFu9ll, BFu31i_BFu7i_BFu9ll)
//============================================================================


struct  BFu31i_BFu7i_BFu9s  {
  unsigned int v1:31;
  unsigned int v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu31i_BFu7i_BFu9s) C1{ Fi:31 Fi:7 Fs:9}



static void Test_BFu31i_BFu7i_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu7i_BFu9s");
    static STRUCT_IF_C BFu31i_BFu7i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "BFu31i_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu7i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_BFu9s, BFu31i_BFu7i_BFu9s)
//============================================================================


struct  BFu31i_BFu7i_C  {
  unsigned int v1:31;
  unsigned int v2:7;
  char v3;
};
//SIG(1 BFu31i_BFu7i_C) C1{ Fi:31 Fi:7 Fc}



static void Test_BFu31i_BFu7i_C()
{
  {
    init_simple_test("BFu31i_BFu7i_C");
    static STRUCT_IF_C BFu31i_BFu7i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7i_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_C");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_C");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_C");
    check_field_offset(lv, v3, 5, "BFu31i_BFu7i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_C, BFu31i_BFu7i_C)
//============================================================================


struct  BFu31i_BFu7i_D  {
  unsigned int v1:31;
  unsigned int v2:7;
  double v3;
};
//SIG(1 BFu31i_BFu7i_D) C1{ Fi:31 Fi:7 FL}



static void Test_BFu31i_BFu7i_D()
{
  {
    init_simple_test("BFu31i_BFu7i_D");
    static STRUCT_IF_C BFu31i_BFu7i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu7i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7i_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_D");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_D");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_D");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_D, BFu31i_BFu7i_D)
//============================================================================


struct  BFu31i_BFu7i_F  {
  unsigned int v1:31;
  unsigned int v2:7;
  float v3;
};
//SIG(1 BFu31i_BFu7i_F) C1{ Fi:31 Fi:7 Fi}



static void Test_BFu31i_BFu7i_F()
{
  {
    init_simple_test("BFu31i_BFu7i_F");
    static STRUCT_IF_C BFu31i_BFu7i_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu7i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7i_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_F");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_F");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_F");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_F, BFu31i_BFu7i_F)
//============================================================================


struct  BFu31i_BFu7i_I  {
  unsigned int v1:31;
  unsigned int v2:7;
  int v3;
};
//SIG(1 BFu31i_BFu7i_I) C1{ Fi:31 Fi:7 Fi}



static void Test_BFu31i_BFu7i_I()
{
  {
    init_simple_test("BFu31i_BFu7i_I");
    static STRUCT_IF_C BFu31i_BFu7i_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu7i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7i_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_I");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_I");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_I");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_I, BFu31i_BFu7i_I)
//============================================================================


struct  BFu31i_BFu7i_Ip  {
  unsigned int v1:31;
  unsigned int v2:7;
  int *v3;
};
//SIG(1 BFu31i_BFu7i_Ip) C1{ Fi:31 Fi:7 Fp}



static void Test_BFu31i_BFu7i_Ip()
{
  {
    init_simple_test("BFu31i_BFu7i_Ip");
    static STRUCT_IF_C BFu31i_BFu7i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu7i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_Ip");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_Ip, BFu31i_BFu7i_Ip)
//============================================================================


struct  BFu31i_BFu7i_L  {
  unsigned int v1:31;
  unsigned int v2:7;
  __tsi64 v3;
};
//SIG(1 BFu31i_BFu7i_L) C1{ Fi:31 Fi:7 FL}



static void Test_BFu31i_BFu7i_L()
{
  {
    init_simple_test("BFu31i_BFu7i_L");
    static STRUCT_IF_C BFu31i_BFu7i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu7i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7i_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_L");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_L");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_L");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_L, BFu31i_BFu7i_L)
//============================================================================


struct  BFu31i_BFu7i_S  {
  unsigned int v1:31;
  unsigned int v2:7;
  short v3;
};
//SIG(1 BFu31i_BFu7i_S) C1{ Fi:31 Fi:7 Fs}



static void Test_BFu31i_BFu7i_S()
{
  {
    init_simple_test("BFu31i_BFu7i_S");
    static STRUCT_IF_C BFu31i_BFu7i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7i_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_S");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_S");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_S");
    check_field_offset(lv, v3, 6, "BFu31i_BFu7i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_S, BFu31i_BFu7i_S)
//============================================================================


struct  BFu31i_BFu7i_Uc  {
  unsigned int v1:31;
  unsigned int v2:7;
  unsigned char v3;
};
//SIG(1 BFu31i_BFu7i_Uc) C1{ Fi:31 Fi:7 Fc}



static void Test_BFu31i_BFu7i_Uc()
{
  {
    init_simple_test("BFu31i_BFu7i_Uc");
    static STRUCT_IF_C BFu31i_BFu7i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_Uc");
    check_field_offset(lv, v3, 5, "BFu31i_BFu7i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_Uc, BFu31i_BFu7i_Uc)
//============================================================================


struct  BFu31i_BFu7i_Ui  {
  unsigned int v1:31;
  unsigned int v2:7;
  unsigned int v3;
};
//SIG(1 BFu31i_BFu7i_Ui) C1{ Fi:31 Fi:7 Fi}



static void Test_BFu31i_BFu7i_Ui()
{
  {
    init_simple_test("BFu31i_BFu7i_Ui");
    static STRUCT_IF_C BFu31i_BFu7i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu7i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_Ui");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_Ui, BFu31i_BFu7i_Ui)
//============================================================================


struct  BFu31i_BFu7i_Ul  {
  unsigned int v1:31;
  unsigned int v2:7;
  __tsu64 v3;
};
//SIG(1 BFu31i_BFu7i_Ul) C1{ Fi:31 Fi:7 FL}



static void Test_BFu31i_BFu7i_Ul()
{
  {
    init_simple_test("BFu31i_BFu7i_Ul");
    static STRUCT_IF_C BFu31i_BFu7i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu7i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_Ul");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_Ul, BFu31i_BFu7i_Ul)
//============================================================================


struct  BFu31i_BFu7i_Us  {
  unsigned int v1:31;
  unsigned int v2:7;
  unsigned short v3;
};
//SIG(1 BFu31i_BFu7i_Us) C1{ Fi:31 Fi:7 Fs}



static void Test_BFu31i_BFu7i_Us()
{
  {
    init_simple_test("BFu31i_BFu7i_Us");
    static STRUCT_IF_C BFu31i_BFu7i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_Us");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_Us");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_Us");
    check_field_offset(lv, v3, 6, "BFu31i_BFu7i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_Us, BFu31i_BFu7i_Us)
//============================================================================


struct  BFu31i_BFu7i_Vp  {
  unsigned int v1:31;
  unsigned int v2:7;
  void *v3;
};
//SIG(1 BFu31i_BFu7i_Vp) C1{ Fi:31 Fi:7 Fp}



static void Test_BFu31i_BFu7i_Vp()
{
  {
    init_simple_test("BFu31i_BFu7i_Vp");
    static STRUCT_IF_C BFu31i_BFu7i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu7i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_Vp");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7i_Vp, BFu31i_BFu7i_Vp)
//============================================================================


struct  BFu31i_BFu7ll  {
  unsigned int v1:31;
  __tsu64 v2:7;
};
//SIG(1 BFu31i_BFu7ll) C1{ Fi:31 FL:7}



static void Test_BFu31i_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll, BFu31i_BFu7ll)
//============================================================================


struct  BFu31i_BFu7ll_BFu15i  {
  unsigned int v1:31;
  __tsu64 v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu31i_BFu7ll_BFu15i) C1{ Fi:31 FL:7 Fi:15}



static void Test_BFu31i_BFu7ll_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu7ll_BFu15i");
    static STRUCT_IF_C BFu31i_BFu7ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 6, 15, 1, "BFu31i_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 6, 15, hide_ull(1LL<<14), "BFu31i_BFu7ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_BFu15i, BFu31i_BFu7ll_BFu15i)
//============================================================================


struct  BFu31i_BFu7ll_BFu15ll  {
  unsigned int v1:31;
  __tsu64 v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_BFu7ll_BFu15ll) C1{ Fi:31 FL:7 FL:15}



static void Test_BFu31i_BFu7ll_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu7ll_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu7ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 6, 15, 1, "BFu31i_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 6, 15, hide_ull(1LL<<14), "BFu31i_BFu7ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_BFu15ll, BFu31i_BFu7ll_BFu15ll)
//============================================================================


struct  BFu31i_BFu7ll_BFu15s  {
  unsigned int v1:31;
  __tsu64 v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu31i_BFu7ll_BFu15s) C1{ Fi:31 FL:7 Fs:15}



static void Test_BFu31i_BFu7ll_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu7ll_BFu15s");
    static STRUCT_IF_C BFu31i_BFu7ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_BFu7ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu7ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_BFu15s, BFu31i_BFu7ll_BFu15s)
//============================================================================


struct  BFu31i_BFu7ll_BFu16i  {
  unsigned int v1:31;
  __tsu64 v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu31i_BFu7ll_BFu16i) C1{ Fi:31 FL:7 Fi:16}



static void Test_BFu31i_BFu7ll_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu7ll_BFu16i");
    static STRUCT_IF_C BFu31i_BFu7ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 6, 16, 1, "BFu31i_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 6, 16, hide_ull(1LL<<15), "BFu31i_BFu7ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_BFu16i, BFu31i_BFu7ll_BFu16i)
//============================================================================


struct  BFu31i_BFu7ll_BFu16ll  {
  unsigned int v1:31;
  __tsu64 v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_BFu7ll_BFu16ll) C1{ Fi:31 FL:7 FL:16}



static void Test_BFu31i_BFu7ll_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu7ll_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu7ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 6, 16, 1, "BFu31i_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 6, 16, hide_ull(1LL<<15), "BFu31i_BFu7ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_BFu16ll, BFu31i_BFu7ll_BFu16ll)
//============================================================================


struct  BFu31i_BFu7ll_BFu16s  {
  unsigned int v1:31;
  __tsu64 v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu31i_BFu7ll_BFu16s) C1{ Fi:31 FL:7 Fs:16}



static void Test_BFu31i_BFu7ll_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu7ll_BFu16s");
    static STRUCT_IF_C BFu31i_BFu7ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_BFu7ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu7ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_BFu16s, BFu31i_BFu7ll_BFu16s)
//============================================================================


struct  BFu31i_BFu7ll_BFu17i  {
  unsigned int v1:31;
  __tsu64 v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu31i_BFu7ll_BFu17i) C1{ Fi:31 FL:7 Fi:17}



static void Test_BFu31i_BFu7ll_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu7ll_BFu17i");
    static STRUCT_IF_C BFu31i_BFu7ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 6, 17, 1, "BFu31i_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 6, 17, hide_ull(1LL<<16), "BFu31i_BFu7ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_BFu17i, BFu31i_BFu7ll_BFu17i)
//============================================================================


struct  BFu31i_BFu7ll_BFu17ll  {
  unsigned int v1:31;
  __tsu64 v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_BFu7ll_BFu17ll) C1{ Fi:31 FL:7 FL:17}



static void Test_BFu31i_BFu7ll_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu7ll_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu7ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 6, 17, 1, "BFu31i_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 6, 17, hide_ull(1LL<<16), "BFu31i_BFu7ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_BFu17ll, BFu31i_BFu7ll_BFu17ll)
//============================================================================


struct  BFu31i_BFu7ll_BFu1c  {
  unsigned int v1:31;
  __tsu64 v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu31i_BFu7ll_BFu1c) C1{ Fi:31 FL:7 Fc:1}



static void Test_BFu31i_BFu7ll_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu7ll_BFu1c");
    static STRUCT_IF_C BFu31i_BFu7ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu1c");
    set_bf_and_test(lv, v3, 4, 6, 1, 1, "BFu31i_BFu7ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_BFu1c, BFu31i_BFu7ll_BFu1c)
//============================================================================


struct  BFu31i_BFu7ll_BFu1i  {
  unsigned int v1:31;
  __tsu64 v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu31i_BFu7ll_BFu1i) C1{ Fi:31 FL:7 Fi:1}



static void Test_BFu31i_BFu7ll_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu7ll_BFu1i");
    static STRUCT_IF_C BFu31i_BFu7ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu1i");
    set_bf_and_test(lv, v3, 4, 6, 1, 1, "BFu31i_BFu7ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_BFu1i, BFu31i_BFu7ll_BFu1i)
//============================================================================


struct  BFu31i_BFu7ll_BFu1ll  {
  unsigned int v1:31;
  __tsu64 v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_BFu7ll_BFu1ll) C1{ Fi:31 FL:7 FL:1}



static void Test_BFu31i_BFu7ll_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu7ll_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu7ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v3, 4, 6, 1, 1, "BFu31i_BFu7ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_BFu1ll, BFu31i_BFu7ll_BFu1ll)
//============================================================================


struct  BFu31i_BFu7ll_BFu1s  {
  unsigned int v1:31;
  __tsu64 v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu31i_BFu7ll_BFu1s) C1{ Fi:31 FL:7 Fs:1}



static void Test_BFu31i_BFu7ll_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu7ll_BFu1s");
    static STRUCT_IF_C BFu31i_BFu7ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu1s");
    set_bf_and_test(lv, v3, 4, 6, 1, 1, "BFu31i_BFu7ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_BFu1s, BFu31i_BFu7ll_BFu1s)
//============================================================================


struct  BFu31i_BFu7ll_BFu31i  {
  unsigned int v1:31;
  __tsu64 v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFu7ll_BFu31i) C1{ Fi:31 FL:7 Fi:31}



static void Test_BFu31i_BFu7ll_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu7ll_BFu31i");
    static STRUCT_IF_C BFu31i_BFu7ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu7ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu7ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_BFu31i, BFu31i_BFu7ll_BFu31i)
//============================================================================


struct  BFu31i_BFu7ll_BFu31ll  {
  unsigned int v1:31;
  __tsu64 v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFu7ll_BFu31ll) C1{ Fi:31 FL:7 FL:31}



static void Test_BFu31i_BFu7ll_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu7ll_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu7ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu7ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 31, 1, "BFu31i_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_BFu31ll, BFu31i_BFu7ll_BFu31ll)
//============================================================================


struct  BFu31i_BFu7ll_BFu32i  {
  unsigned int v1:31;
  __tsu64 v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu31i_BFu7ll_BFu32i) C1{ Fi:31 FL:7 Fi:32}



static void Test_BFu31i_BFu7ll_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu7ll_BFu32i");
    static STRUCT_IF_C BFu31i_BFu7ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu7ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_BFu7ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu7ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_BFu32i, BFu31i_BFu7ll_BFu32i)
//============================================================================


struct  BFu31i_BFu7ll_BFu32ll  {
  unsigned int v1:31;
  __tsu64 v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_BFu7ll_BFu32ll) C1{ Fi:31 FL:7 FL:32}



static void Test_BFu31i_BFu7ll_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu7ll_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu7ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu7ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 32, 1, "BFu31i_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 32, hide_ull(1LL<<31), "BFu31i_BFu7ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_BFu32ll, BFu31i_BFu7ll_BFu32ll)
//============================================================================


struct  BFu31i_BFu7ll_BFu33  {
  unsigned int v1:31;
  __tsu64 v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_BFu7ll_BFu33) C1{ Fi:31 FL:7 FL:33}



static void Test_BFu31i_BFu7ll_BFu33()
{
  {
    init_simple_test("BFu31i_BFu7ll_BFu33");
    static STRUCT_IF_C BFu31i_BFu7ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu7ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 33, 1, "BFu31i_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 33, hide_ull(1LL<<32), "BFu31i_BFu7ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_BFu33, BFu31i_BFu7ll_BFu33)
//============================================================================


struct  BFu31i_BFu7ll_BFu7c  {
  unsigned int v1:31;
  __tsu64 v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu31i_BFu7ll_BFu7c) C1{ Fi:31 FL:7 Fc:7}



static void Test_BFu31i_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu31i_BFu7ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_BFu7c, BFu31i_BFu7ll_BFu7c)
//============================================================================


struct  BFu31i_BFu7ll_BFu7i  {
  unsigned int v1:31;
  __tsu64 v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu31i_BFu7ll_BFu7i) C1{ Fi:31 FL:7 Fi:7}



static void Test_BFu31i_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu31i_BFu7ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 6, 7, 1, "BFu31i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 6, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_BFu7i, BFu31i_BFu7ll_BFu7i)
//============================================================================


struct  BFu31i_BFu7ll_BFu7ll  {
  unsigned int v1:31;
  __tsu64 v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_BFu7ll_BFu7ll) C1{ Fi:31 FL:7 FL:7}



static void Test_BFu31i_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 6, 7, 1, "BFu31i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 6, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_BFu7ll, BFu31i_BFu7ll_BFu7ll)
//============================================================================


struct  BFu31i_BFu7ll_BFu7s  {
  unsigned int v1:31;
  __tsu64 v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu31i_BFu7ll_BFu7s) C1{ Fi:31 FL:7 Fs:7}



static void Test_BFu31i_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu31i_BFu7ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 6, 7, 1, "BFu31i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 6, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_BFu7s, BFu31i_BFu7ll_BFu7s)
//============================================================================


struct  BFu31i_BFu7ll_BFu8c  {
  unsigned int v1:31;
  __tsu64 v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu31i_BFu7ll_BFu8c) C1{ Fi:31 FL:7 Fc:8}



static void Test_BFu31i_BFu7ll_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu7ll_BFu8c");
    static STRUCT_IF_C BFu31i_BFu7ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu7ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_BFu8c, BFu31i_BFu7ll_BFu8c)
//============================================================================


struct  BFu31i_BFu7ll_BFu8i  {
  unsigned int v1:31;
  __tsu64 v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu31i_BFu7ll_BFu8i) C1{ Fi:31 FL:7 Fi:8}



static void Test_BFu31i_BFu7ll_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu7ll_BFu8i");
    static STRUCT_IF_C BFu31i_BFu7ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 6, 8, 1, "BFu31i_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 6, 8, hide_ull(1LL<<7), "BFu31i_BFu7ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_BFu8i, BFu31i_BFu7ll_BFu8i)
//============================================================================


struct  BFu31i_BFu7ll_BFu8ll  {
  unsigned int v1:31;
  __tsu64 v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_BFu7ll_BFu8ll) C1{ Fi:31 FL:7 FL:8}



static void Test_BFu31i_BFu7ll_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu7ll_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu7ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 6, 8, 1, "BFu31i_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 6, 8, hide_ull(1LL<<7), "BFu31i_BFu7ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_BFu8ll, BFu31i_BFu7ll_BFu8ll)
//============================================================================


struct  BFu31i_BFu7ll_BFu8s  {
  unsigned int v1:31;
  __tsu64 v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu31i_BFu7ll_BFu8s) C1{ Fi:31 FL:7 Fs:8}



static void Test_BFu31i_BFu7ll_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu7ll_BFu8s");
    static STRUCT_IF_C BFu31i_BFu7ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 6, 8, 1, "BFu31i_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 6, 8, hide_ull(1LL<<7), "BFu31i_BFu7ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_BFu8s, BFu31i_BFu7ll_BFu8s)
//============================================================================


struct  BFu31i_BFu7ll_BFu9i  {
  unsigned int v1:31;
  __tsu64 v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu31i_BFu7ll_BFu9i) C1{ Fi:31 FL:7 Fi:9}



static void Test_BFu31i_BFu7ll_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu7ll_BFu9i");
    static STRUCT_IF_C BFu31i_BFu7ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 6, 9, 1, "BFu31i_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 6, 9, hide_ull(1LL<<8), "BFu31i_BFu7ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_BFu9i, BFu31i_BFu7ll_BFu9i)
//============================================================================


struct  BFu31i_BFu7ll_BFu9ll  {
  unsigned int v1:31;
  __tsu64 v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_BFu7ll_BFu9ll) C1{ Fi:31 FL:7 FL:9}



static void Test_BFu31i_BFu7ll_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu7ll_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu7ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 6, 9, 1, "BFu31i_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 6, 9, hide_ull(1LL<<8), "BFu31i_BFu7ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_BFu9ll, BFu31i_BFu7ll_BFu9ll)
//============================================================================


struct  BFu31i_BFu7ll_BFu9s  {
  unsigned int v1:31;
  __tsu64 v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu31i_BFu7ll_BFu9s) C1{ Fi:31 FL:7 Fs:9}



static void Test_BFu31i_BFu7ll_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu7ll_BFu9s");
    static STRUCT_IF_C BFu31i_BFu7ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 6, 9, 1, "BFu31i_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 6, 9, hide_ull(1LL<<8), "BFu31i_BFu7ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_BFu9s, BFu31i_BFu7ll_BFu9s)
//============================================================================


struct  BFu31i_BFu7ll_C  {
  unsigned int v1:31;
  __tsu64 v2:7;
  char v3;
};
//SIG(1 BFu31i_BFu7ll_C) C1{ Fi:31 FL:7 Fc}



static void Test_BFu31i_BFu7ll_C()
{
  {
    init_simple_test("BFu31i_BFu7ll_C");
    static STRUCT_IF_C BFu31i_BFu7ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_C");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_C");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_C");
    check_field_offset(lv, v3, 5, "BFu31i_BFu7ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_C, BFu31i_BFu7ll_C)
//============================================================================


struct  BFu31i_BFu7ll_D  {
  unsigned int v1:31;
  __tsu64 v2:7;
  double v3;
};
//SIG(1 BFu31i_BFu7ll_D) C1{ Fi:31 FL:7 FL}



static void Test_BFu31i_BFu7ll_D()
{
  {
    init_simple_test("BFu31i_BFu7ll_D");
    static STRUCT_IF_C BFu31i_BFu7ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu7ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_D");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_D");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_D");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_D, BFu31i_BFu7ll_D)
//============================================================================


struct  BFu31i_BFu7ll_F  {
  unsigned int v1:31;
  __tsu64 v2:7;
  float v3;
};
//SIG(1 BFu31i_BFu7ll_F) C1{ Fi:31 FL:7 Fi}



static void Test_BFu31i_BFu7ll_F()
{
  {
    init_simple_test("BFu31i_BFu7ll_F");
    static STRUCT_IF_C BFu31i_BFu7ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu7ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_F");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_F");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_F");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_F, BFu31i_BFu7ll_F)
//============================================================================


struct  BFu31i_BFu7ll_I  {
  unsigned int v1:31;
  __tsu64 v2:7;
  int v3;
};
//SIG(1 BFu31i_BFu7ll_I) C1{ Fi:31 FL:7 Fi}



static void Test_BFu31i_BFu7ll_I()
{
  {
    init_simple_test("BFu31i_BFu7ll_I");
    static STRUCT_IF_C BFu31i_BFu7ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu7ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_I");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_I");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_I");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_I, BFu31i_BFu7ll_I)
//============================================================================


struct  BFu31i_BFu7ll_Ip  {
  unsigned int v1:31;
  __tsu64 v2:7;
  int *v3;
};
//SIG(1 BFu31i_BFu7ll_Ip) C1{ Fi:31 FL:7 Fp}



static void Test_BFu31i_BFu7ll_Ip()
{
  {
    init_simple_test("BFu31i_BFu7ll_Ip");
    static STRUCT_IF_C BFu31i_BFu7ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu7ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_Ip");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_Ip");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_Ip");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_Ip, BFu31i_BFu7ll_Ip)
//============================================================================


struct  BFu31i_BFu7ll_L  {
  unsigned int v1:31;
  __tsu64 v2:7;
  __tsi64 v3;
};
//SIG(1 BFu31i_BFu7ll_L) C1{ Fi:31 FL:7 FL}



static void Test_BFu31i_BFu7ll_L()
{
  {
    init_simple_test("BFu31i_BFu7ll_L");
    static STRUCT_IF_C BFu31i_BFu7ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu7ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_L");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_L");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_L");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_L, BFu31i_BFu7ll_L)
//============================================================================


struct  BFu31i_BFu7ll_S  {
  unsigned int v1:31;
  __tsu64 v2:7;
  short v3;
};
//SIG(1 BFu31i_BFu7ll_S) C1{ Fi:31 FL:7 Fs}



static void Test_BFu31i_BFu7ll_S()
{
  {
    init_simple_test("BFu31i_BFu7ll_S");
    static STRUCT_IF_C BFu31i_BFu7ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_S");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_S");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_S");
    check_field_offset(lv, v3, 6, "BFu31i_BFu7ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_S, BFu31i_BFu7ll_S)
//============================================================================


struct  BFu31i_BFu7ll_Uc  {
  unsigned int v1:31;
  __tsu64 v2:7;
  unsigned char v3;
};
//SIG(1 BFu31i_BFu7ll_Uc) C1{ Fi:31 FL:7 Fc}



static void Test_BFu31i_BFu7ll_Uc()
{
  {
    init_simple_test("BFu31i_BFu7ll_Uc");
    static STRUCT_IF_C BFu31i_BFu7ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_Uc");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_Uc");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_Uc");
    check_field_offset(lv, v3, 5, "BFu31i_BFu7ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_Uc, BFu31i_BFu7ll_Uc)
//============================================================================


struct  BFu31i_BFu7ll_Ui  {
  unsigned int v1:31;
  __tsu64 v2:7;
  unsigned int v3;
};
//SIG(1 BFu31i_BFu7ll_Ui) C1{ Fi:31 FL:7 Fi}



static void Test_BFu31i_BFu7ll_Ui()
{
  {
    init_simple_test("BFu31i_BFu7ll_Ui");
    static STRUCT_IF_C BFu31i_BFu7ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu7ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_Ui");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_Ui");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_Ui");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_Ui, BFu31i_BFu7ll_Ui)
//============================================================================


struct  BFu31i_BFu7ll_Ul  {
  unsigned int v1:31;
  __tsu64 v2:7;
  __tsu64 v3;
};
//SIG(1 BFu31i_BFu7ll_Ul) C1{ Fi:31 FL:7 FL}



static void Test_BFu31i_BFu7ll_Ul()
{
  {
    init_simple_test("BFu31i_BFu7ll_Ul");
    static STRUCT_IF_C BFu31i_BFu7ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu7ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_Ul");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_Ul");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_Ul");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_Ul, BFu31i_BFu7ll_Ul)
//============================================================================


struct  BFu31i_BFu7ll_Us  {
  unsigned int v1:31;
  __tsu64 v2:7;
  unsigned short v3;
};
//SIG(1 BFu31i_BFu7ll_Us) C1{ Fi:31 FL:7 Fs}



static void Test_BFu31i_BFu7ll_Us()
{
  {
    init_simple_test("BFu31i_BFu7ll_Us");
    static STRUCT_IF_C BFu31i_BFu7ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_Us");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_Us");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_Us");
    check_field_offset(lv, v3, 6, "BFu31i_BFu7ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_Us, BFu31i_BFu7ll_Us)
//============================================================================


struct  BFu31i_BFu7ll_Vp  {
  unsigned int v1:31;
  __tsu64 v2:7;
  void *v3;
};
//SIG(1 BFu31i_BFu7ll_Vp) C1{ Fi:31 FL:7 Fp}



static void Test_BFu31i_BFu7ll_Vp()
{
  {
    init_simple_test("BFu31i_BFu7ll_Vp");
    static STRUCT_IF_C BFu31i_BFu7ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu7ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_Vp");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_Vp");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_Vp");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7ll_Vp, BFu31i_BFu7ll_Vp)
//============================================================================


struct  BFu31i_BFu7s  {
  unsigned int v1:31;
  unsigned short v2:7;
};
//SIG(1 BFu31i_BFu7s) C1{ Fi:31 Fs:7}



static void Test_BFu31i_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu7s");
    static STRUCT_IF_C BFu31i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s, BFu31i_BFu7s)
//============================================================================


struct  BFu31i_BFu7s_BFu15i  {
  unsigned int v1:31;
  unsigned short v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu31i_BFu7s_BFu15i) C1{ Fi:31 Fs:7 Fi:15}



static void Test_BFu31i_BFu7s_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu7s_BFu15i");
    static STRUCT_IF_C BFu31i_BFu7s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, 4, 7, 15, 1, "BFu31i_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, 4, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu7s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_BFu15i, BFu31i_BFu7s_BFu15i)
//============================================================================


struct  BFu31i_BFu7s_BFu15ll  {
  unsigned int v1:31;
  unsigned short v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_BFu7s_BFu15ll) C1{ Fi:31 Fs:7 FL:15}



static void Test_BFu31i_BFu7s_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu7s_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu7s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 7, 15, 1, "BFu31i_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu7s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_BFu15ll, BFu31i_BFu7s_BFu15ll)
//============================================================================


struct  BFu31i_BFu7s_BFu15s  {
  unsigned int v1:31;
  unsigned short v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu31i_BFu7s_BFu15s) C1{ Fi:31 Fs:7 Fs:15}



static void Test_BFu31i_BFu7s_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu7s_BFu15s");
    static STRUCT_IF_C BFu31i_BFu7s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_BFu7s_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu7s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_BFu15s, BFu31i_BFu7s_BFu15s)
//============================================================================


struct  BFu31i_BFu7s_BFu16i  {
  unsigned int v1:31;
  unsigned short v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu31i_BFu7s_BFu16i) C1{ Fi:31 Fs:7 Fi:16}



static void Test_BFu31i_BFu7s_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu7s_BFu16i");
    static STRUCT_IF_C BFu31i_BFu7s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, 4, 7, 16, 1, "BFu31i_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, 4, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu7s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_BFu16i, BFu31i_BFu7s_BFu16i)
//============================================================================


struct  BFu31i_BFu7s_BFu16ll  {
  unsigned int v1:31;
  unsigned short v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_BFu7s_BFu16ll) C1{ Fi:31 Fs:7 FL:16}



static void Test_BFu31i_BFu7s_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu7s_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu7s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 7, 16, 1, "BFu31i_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu7s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_BFu16ll, BFu31i_BFu7s_BFu16ll)
//============================================================================


struct  BFu31i_BFu7s_BFu16s  {
  unsigned int v1:31;
  unsigned short v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu31i_BFu7s_BFu16s) C1{ Fi:31 Fs:7 Fs:16}



static void Test_BFu31i_BFu7s_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu7s_BFu16s");
    static STRUCT_IF_C BFu31i_BFu7s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_BFu7s_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu7s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_BFu16s, BFu31i_BFu7s_BFu16s)
//============================================================================


struct  BFu31i_BFu7s_BFu17i  {
  unsigned int v1:31;
  unsigned short v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu31i_BFu7s_BFu17i) C1{ Fi:31 Fs:7 Fi:17}



static void Test_BFu31i_BFu7s_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu7s_BFu17i");
    static STRUCT_IF_C BFu31i_BFu7s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, 4, 7, 17, 1, "BFu31i_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, 4, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu7s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_BFu17i, BFu31i_BFu7s_BFu17i)
//============================================================================


struct  BFu31i_BFu7s_BFu17ll  {
  unsigned int v1:31;
  unsigned short v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_BFu7s_BFu17ll) C1{ Fi:31 Fs:7 FL:17}



static void Test_BFu31i_BFu7s_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu7s_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu7s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 7, 17, 1, "BFu31i_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu7s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_BFu17ll, BFu31i_BFu7s_BFu17ll)
//============================================================================


struct  BFu31i_BFu7s_BFu1c  {
  unsigned int v1:31;
  unsigned short v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu31i_BFu7s_BFu1c) C1{ Fi:31 Fs:7 Fc:1}



static void Test_BFu31i_BFu7s_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu7s_BFu1c");
    static STRUCT_IF_C BFu31i_BFu7s_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu1c");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu31i_BFu7s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_BFu1c, BFu31i_BFu7s_BFu1c)
//============================================================================


struct  BFu31i_BFu7s_BFu1i  {
  unsigned int v1:31;
  unsigned short v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu31i_BFu7s_BFu1i) C1{ Fi:31 Fs:7 Fi:1}



static void Test_BFu31i_BFu7s_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu7s_BFu1i");
    static STRUCT_IF_C BFu31i_BFu7s_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu1i");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu31i_BFu7s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_BFu1i, BFu31i_BFu7s_BFu1i)
//============================================================================


struct  BFu31i_BFu7s_BFu1ll  {
  unsigned int v1:31;
  unsigned short v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_BFu7s_BFu1ll) C1{ Fi:31 Fs:7 FL:1}



static void Test_BFu31i_BFu7s_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu7s_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu7s_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu1ll");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu31i_BFu7s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_BFu1ll, BFu31i_BFu7s_BFu1ll)
//============================================================================


struct  BFu31i_BFu7s_BFu1s  {
  unsigned int v1:31;
  unsigned short v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu31i_BFu7s_BFu1s) C1{ Fi:31 Fs:7 Fs:1}



static void Test_BFu31i_BFu7s_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu7s_BFu1s");
    static STRUCT_IF_C BFu31i_BFu7s_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu1s");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu31i_BFu7s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_BFu1s, BFu31i_BFu7s_BFu1s)
//============================================================================


struct  BFu31i_BFu7s_BFu31i  {
  unsigned int v1:31;
  unsigned short v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFu7s_BFu31i) C1{ Fi:31 Fs:7 Fi:31}



static void Test_BFu31i_BFu7s_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu7s_BFu31i");
    static STRUCT_IF_C BFu31i_BFu7s_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu7s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu7s_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_BFu31i, BFu31i_BFu7s_BFu31i)
//============================================================================


struct  BFu31i_BFu7s_BFu31ll  {
  unsigned int v1:31;
  unsigned short v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFu7s_BFu31ll) C1{ Fi:31 Fs:7 FL:31}



static void Test_BFu31i_BFu7s_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu7s_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu7s_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu7s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 31, 1, "BFu31i_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_BFu31ll, BFu31i_BFu7s_BFu31ll)
//============================================================================


struct  BFu31i_BFu7s_BFu32i  {
  unsigned int v1:31;
  unsigned short v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu31i_BFu7s_BFu32i) C1{ Fi:31 Fs:7 Fi:32}



static void Test_BFu31i_BFu7s_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu7s_BFu32i");
    static STRUCT_IF_C BFu31i_BFu7s_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu7s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu7s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_BFu32i, BFu31i_BFu7s_BFu32i)
//============================================================================


struct  BFu31i_BFu7s_BFu32ll  {
  unsigned int v1:31;
  unsigned short v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_BFu7s_BFu32ll) C1{ Fi:31 Fs:7 FL:32}



static void Test_BFu31i_BFu7s_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu7s_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu7s_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu7s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 32, 1, "BFu31i_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu31i_BFu7s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_BFu32ll, BFu31i_BFu7s_BFu32ll)
//============================================================================


struct  BFu31i_BFu7s_BFu33  {
  unsigned int v1:31;
  unsigned short v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_BFu7s_BFu33) C1{ Fi:31 Fs:7 FL:33}



static void Test_BFu31i_BFu7s_BFu33()
{
  {
    init_simple_test("BFu31i_BFu7s_BFu33");
    static STRUCT_IF_C BFu31i_BFu7s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu7s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 33, 1, "BFu31i_BFu7s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu31i_BFu7s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_BFu33, BFu31i_BFu7s_BFu33)
//============================================================================


struct  BFu31i_BFu7s_BFu7c  {
  unsigned int v1:31;
  unsigned short v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu31i_BFu7s_BFu7c) C1{ Fi:31 Fs:7 Fc:7}



static void Test_BFu31i_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu7s_BFu7c");
    static STRUCT_IF_C BFu31i_BFu7s_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_BFu7c, BFu31i_BFu7s_BFu7c)
//============================================================================


struct  BFu31i_BFu7s_BFu7i  {
  unsigned int v1:31;
  unsigned short v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu31i_BFu7s_BFu7i) C1{ Fi:31 Fs:7 Fi:7}



static void Test_BFu31i_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu7s_BFu7i");
    static STRUCT_IF_C BFu31i_BFu7s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "BFu31i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_BFu7i, BFu31i_BFu7s_BFu7i)
//============================================================================


struct  BFu31i_BFu7s_BFu7ll  {
  unsigned int v1:31;
  unsigned short v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_BFu7s_BFu7ll) C1{ Fi:31 Fs:7 FL:7}



static void Test_BFu31i_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu7s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "BFu31i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_BFu7ll, BFu31i_BFu7s_BFu7ll)
//============================================================================


struct  BFu31i_BFu7s_BFu7s  {
  unsigned int v1:31;
  unsigned short v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu31i_BFu7s_BFu7s) C1{ Fi:31 Fs:7 Fs:7}



static void Test_BFu31i_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu7s_BFu7s");
    static STRUCT_IF_C BFu31i_BFu7s_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "BFu31i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_BFu7s, BFu31i_BFu7s_BFu7s)
//============================================================================


struct  BFu31i_BFu7s_BFu8c  {
  unsigned int v1:31;
  unsigned short v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu31i_BFu7s_BFu8c) C1{ Fi:31 Fs:7 Fc:8}



static void Test_BFu31i_BFu7s_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu7s_BFu8c");
    static STRUCT_IF_C BFu31i_BFu7s_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu7s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_BFu8c, BFu31i_BFu7s_BFu8c)
//============================================================================


struct  BFu31i_BFu7s_BFu8i  {
  unsigned int v1:31;
  unsigned short v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu31i_BFu7s_BFu8i) C1{ Fi:31 Fs:7 Fi:8}



static void Test_BFu31i_BFu7s_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu7s_BFu8i");
    static STRUCT_IF_C BFu31i_BFu7s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "BFu31i_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu7s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_BFu8i, BFu31i_BFu7s_BFu8i)
//============================================================================


struct  BFu31i_BFu7s_BFu8ll  {
  unsigned int v1:31;
  unsigned short v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_BFu7s_BFu8ll) C1{ Fi:31 Fs:7 FL:8}



static void Test_BFu31i_BFu7s_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu7s_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu7s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "BFu31i_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu7s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_BFu8ll, BFu31i_BFu7s_BFu8ll)
//============================================================================


struct  BFu31i_BFu7s_BFu8s  {
  unsigned int v1:31;
  unsigned short v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu31i_BFu7s_BFu8s) C1{ Fi:31 Fs:7 Fs:8}



static void Test_BFu31i_BFu7s_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu7s_BFu8s");
    static STRUCT_IF_C BFu31i_BFu7s_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "BFu31i_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu7s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_BFu8s, BFu31i_BFu7s_BFu8s)
//============================================================================


struct  BFu31i_BFu7s_BFu9i  {
  unsigned int v1:31;
  unsigned short v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu31i_BFu7s_BFu9i) C1{ Fi:31 Fs:7 Fi:9}



static void Test_BFu31i_BFu7s_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu7s_BFu9i");
    static STRUCT_IF_C BFu31i_BFu7s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "BFu31i_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu7s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_BFu9i, BFu31i_BFu7s_BFu9i)
//============================================================================


struct  BFu31i_BFu7s_BFu9ll  {
  unsigned int v1:31;
  unsigned short v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_BFu7s_BFu9ll) C1{ Fi:31 Fs:7 FL:9}



static void Test_BFu31i_BFu7s_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu7s_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu7s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "BFu31i_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu7s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_BFu9ll, BFu31i_BFu7s_BFu9ll)
//============================================================================


struct  BFu31i_BFu7s_BFu9s  {
  unsigned int v1:31;
  unsigned short v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu31i_BFu7s_BFu9s) C1{ Fi:31 Fs:7 Fs:9}



static void Test_BFu31i_BFu7s_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu7s_BFu9s");
    static STRUCT_IF_C BFu31i_BFu7s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "BFu31i_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu7s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_BFu9s, BFu31i_BFu7s_BFu9s)
//============================================================================


struct  BFu31i_BFu7s_C  {
  unsigned int v1:31;
  unsigned short v2:7;
  char v3;
};
//SIG(1 BFu31i_BFu7s_C) C1{ Fi:31 Fs:7 Fc}



static void Test_BFu31i_BFu7s_C()
{
  {
    init_simple_test("BFu31i_BFu7s_C");
    static STRUCT_IF_C BFu31i_BFu7s_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7s_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_C");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_C");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_C");
    check_field_offset(lv, v3, 5, "BFu31i_BFu7s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_C, BFu31i_BFu7s_C)
//============================================================================


struct  BFu31i_BFu7s_D  {
  unsigned int v1:31;
  unsigned short v2:7;
  double v3;
};
//SIG(1 BFu31i_BFu7s_D) C1{ Fi:31 Fs:7 FL}



static void Test_BFu31i_BFu7s_D()
{
  {
    init_simple_test("BFu31i_BFu7s_D");
    static STRUCT_IF_C BFu31i_BFu7s_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu7s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7s_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_D");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_D");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_D");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_D, BFu31i_BFu7s_D)
//============================================================================


struct  BFu31i_BFu7s_F  {
  unsigned int v1:31;
  unsigned short v2:7;
  float v3;
};
//SIG(1 BFu31i_BFu7s_F) C1{ Fi:31 Fs:7 Fi}



static void Test_BFu31i_BFu7s_F()
{
  {
    init_simple_test("BFu31i_BFu7s_F");
    static STRUCT_IF_C BFu31i_BFu7s_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu7s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7s_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_F");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_F");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_F");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_F, BFu31i_BFu7s_F)
//============================================================================


struct  BFu31i_BFu7s_I  {
  unsigned int v1:31;
  unsigned short v2:7;
  int v3;
};
//SIG(1 BFu31i_BFu7s_I) C1{ Fi:31 Fs:7 Fi}



static void Test_BFu31i_BFu7s_I()
{
  {
    init_simple_test("BFu31i_BFu7s_I");
    static STRUCT_IF_C BFu31i_BFu7s_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu7s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7s_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_I");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_I");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_I");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_I, BFu31i_BFu7s_I)
//============================================================================


struct  BFu31i_BFu7s_Ip  {
  unsigned int v1:31;
  unsigned short v2:7;
  int *v3;
};
//SIG(1 BFu31i_BFu7s_Ip) C1{ Fi:31 Fs:7 Fp}



static void Test_BFu31i_BFu7s_Ip()
{
  {
    init_simple_test("BFu31i_BFu7s_Ip");
    static STRUCT_IF_C BFu31i_BFu7s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu7s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_Ip");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_Ip");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_Ip");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_Ip, BFu31i_BFu7s_Ip)
//============================================================================


struct  BFu31i_BFu7s_L  {
  unsigned int v1:31;
  unsigned short v2:7;
  __tsi64 v3;
};
//SIG(1 BFu31i_BFu7s_L) C1{ Fi:31 Fs:7 FL}



static void Test_BFu31i_BFu7s_L()
{
  {
    init_simple_test("BFu31i_BFu7s_L");
    static STRUCT_IF_C BFu31i_BFu7s_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu7s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7s_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_L");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_L");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_L");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_L, BFu31i_BFu7s_L)
//============================================================================


struct  BFu31i_BFu7s_S  {
  unsigned int v1:31;
  unsigned short v2:7;
  short v3;
};
//SIG(1 BFu31i_BFu7s_S) C1{ Fi:31 Fs:7 Fs}



static void Test_BFu31i_BFu7s_S()
{
  {
    init_simple_test("BFu31i_BFu7s_S");
    static STRUCT_IF_C BFu31i_BFu7s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7s_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_S");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_S");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_S");
    check_field_offset(lv, v3, 6, "BFu31i_BFu7s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_S, BFu31i_BFu7s_S)
//============================================================================


struct  BFu31i_BFu7s_Uc  {
  unsigned int v1:31;
  unsigned short v2:7;
  unsigned char v3;
};
//SIG(1 BFu31i_BFu7s_Uc) C1{ Fi:31 Fs:7 Fc}



static void Test_BFu31i_BFu7s_Uc()
{
  {
    init_simple_test("BFu31i_BFu7s_Uc");
    static STRUCT_IF_C BFu31i_BFu7s_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_Uc");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_Uc");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_Uc");
    check_field_offset(lv, v3, 5, "BFu31i_BFu7s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_Uc, BFu31i_BFu7s_Uc)
//============================================================================


struct  BFu31i_BFu7s_Ui  {
  unsigned int v1:31;
  unsigned short v2:7;
  unsigned int v3;
};
//SIG(1 BFu31i_BFu7s_Ui) C1{ Fi:31 Fs:7 Fi}



static void Test_BFu31i_BFu7s_Ui()
{
  {
    init_simple_test("BFu31i_BFu7s_Ui");
    static STRUCT_IF_C BFu31i_BFu7s_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu7s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_Ui");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_Ui");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_Ui");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_Ui, BFu31i_BFu7s_Ui)
//============================================================================


struct  BFu31i_BFu7s_Ul  {
  unsigned int v1:31;
  unsigned short v2:7;
  __tsu64 v3;
};
//SIG(1 BFu31i_BFu7s_Ul) C1{ Fi:31 Fs:7 FL}



static void Test_BFu31i_BFu7s_Ul()
{
  {
    init_simple_test("BFu31i_BFu7s_Ul");
    static STRUCT_IF_C BFu31i_BFu7s_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu7s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_Ul");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_Ul");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_Ul");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_Ul, BFu31i_BFu7s_Ul)
//============================================================================


struct  BFu31i_BFu7s_Us  {
  unsigned int v1:31;
  unsigned short v2:7;
  unsigned short v3;
};
//SIG(1 BFu31i_BFu7s_Us) C1{ Fi:31 Fs:7 Fs}



static void Test_BFu31i_BFu7s_Us()
{
  {
    init_simple_test("BFu31i_BFu7s_Us");
    static STRUCT_IF_C BFu31i_BFu7s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_Us");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_Us");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_Us");
    check_field_offset(lv, v3, 6, "BFu31i_BFu7s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_Us, BFu31i_BFu7s_Us)
//============================================================================


struct  BFu31i_BFu7s_Vp  {
  unsigned int v1:31;
  unsigned short v2:7;
  void *v3;
};
//SIG(1 BFu31i_BFu7s_Vp) C1{ Fi:31 Fs:7 Fp}



static void Test_BFu31i_BFu7s_Vp()
{
  {
    init_simple_test("BFu31i_BFu7s_Vp");
    static STRUCT_IF_C BFu31i_BFu7s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu7s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_Vp");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_Vp");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_Vp");
    check_field_offset(lv, v3, 8, "BFu31i_BFu7s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu7s_Vp, BFu31i_BFu7s_Vp)
//============================================================================


struct  BFu31i_BFu8c  {
  unsigned int v1:31;
  unsigned char v2:8;
};
//SIG(1 BFu31i_BFu8c) C1{ Fi:31 Fc:8}



static void Test_BFu31i_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu8c");
    static STRUCT_IF_C BFu31i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c, BFu31i_BFu8c)
//============================================================================


struct  BFu31i_BFu8c_BFu15i  {
  unsigned int v1:31;
  unsigned char v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu31i_BFu8c_BFu15i) C1{ Fi:31 Fc:8 Fi:15}



static void Test_BFu31i_BFu8c_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu8c_BFu15i");
    static STRUCT_IF_C BFu31i_BFu8c_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu31i_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu8c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_BFu15i, BFu31i_BFu8c_BFu15i)
//============================================================================


struct  BFu31i_BFu8c_BFu15ll  {
  unsigned int v1:31;
  unsigned char v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_BFu8c_BFu15ll) C1{ Fi:31 Fc:8 FL:15}



static void Test_BFu31i_BFu8c_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu8c_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu8c_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu31i_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu8c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_BFu15ll, BFu31i_BFu8c_BFu15ll)
//============================================================================


struct  BFu31i_BFu8c_BFu15s  {
  unsigned int v1:31;
  unsigned char v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu31i_BFu8c_BFu15s) C1{ Fi:31 Fc:8 Fs:15}



static void Test_BFu31i_BFu8c_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu8c_BFu15s");
    static STRUCT_IF_C BFu31i_BFu8c_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu8c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_BFu15s, BFu31i_BFu8c_BFu15s)
//============================================================================


struct  BFu31i_BFu8c_BFu16i  {
  unsigned int v1:31;
  unsigned char v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu31i_BFu8c_BFu16i) C1{ Fi:31 Fc:8 Fi:16}



static void Test_BFu31i_BFu8c_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu8c_BFu16i");
    static STRUCT_IF_C BFu31i_BFu8c_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu31i_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu8c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_BFu16i, BFu31i_BFu8c_BFu16i)
//============================================================================


struct  BFu31i_BFu8c_BFu16ll  {
  unsigned int v1:31;
  unsigned char v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_BFu8c_BFu16ll) C1{ Fi:31 Fc:8 FL:16}



static void Test_BFu31i_BFu8c_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu8c_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu8c_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu31i_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu8c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_BFu16ll, BFu31i_BFu8c_BFu16ll)
//============================================================================


struct  BFu31i_BFu8c_BFu16s  {
  unsigned int v1:31;
  unsigned char v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu31i_BFu8c_BFu16s) C1{ Fi:31 Fc:8 Fs:16}



static void Test_BFu31i_BFu8c_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu8c_BFu16s");
    static STRUCT_IF_C BFu31i_BFu8c_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu8c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_BFu16s, BFu31i_BFu8c_BFu16s)
//============================================================================


struct  BFu31i_BFu8c_BFu17i  {
  unsigned int v1:31;
  unsigned char v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu31i_BFu8c_BFu17i) C1{ Fi:31 Fc:8 Fi:17}



static void Test_BFu31i_BFu8c_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu8c_BFu17i");
    static STRUCT_IF_C BFu31i_BFu8c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu31i_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu8c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_BFu17i, BFu31i_BFu8c_BFu17i)
//============================================================================


struct  BFu31i_BFu8c_BFu17ll  {
  unsigned int v1:31;
  unsigned char v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_BFu8c_BFu17ll) C1{ Fi:31 Fc:8 FL:17}



static void Test_BFu31i_BFu8c_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu8c_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu8c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu31i_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu8c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_BFu17ll, BFu31i_BFu8c_BFu17ll)
//============================================================================


struct  BFu31i_BFu8c_BFu1c  {
  unsigned int v1:31;
  unsigned char v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu31i_BFu8c_BFu1c) C1{ Fi:31 Fc:8 Fc:1}



static void Test_BFu31i_BFu8c_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu8c_BFu1c");
    static STRUCT_IF_C BFu31i_BFu8c_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu1c");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31i_BFu8c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_BFu1c, BFu31i_BFu8c_BFu1c)
//============================================================================


struct  BFu31i_BFu8c_BFu1i  {
  unsigned int v1:31;
  unsigned char v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu31i_BFu8c_BFu1i) C1{ Fi:31 Fc:8 Fi:1}



static void Test_BFu31i_BFu8c_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu8c_BFu1i");
    static STRUCT_IF_C BFu31i_BFu8c_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu1i");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31i_BFu8c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_BFu1i, BFu31i_BFu8c_BFu1i)
//============================================================================


struct  BFu31i_BFu8c_BFu1ll  {
  unsigned int v1:31;
  unsigned char v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_BFu8c_BFu1ll) C1{ Fi:31 Fc:8 FL:1}



static void Test_BFu31i_BFu8c_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu8c_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu8c_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu1ll");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31i_BFu8c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_BFu1ll, BFu31i_BFu8c_BFu1ll)
//============================================================================


struct  BFu31i_BFu8c_BFu1s  {
  unsigned int v1:31;
  unsigned char v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu31i_BFu8c_BFu1s) C1{ Fi:31 Fc:8 Fs:1}



static void Test_BFu31i_BFu8c_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu8c_BFu1s");
    static STRUCT_IF_C BFu31i_BFu8c_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu1s");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31i_BFu8c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_BFu1s, BFu31i_BFu8c_BFu1s)
//============================================================================


struct  BFu31i_BFu8c_BFu31i  {
  unsigned int v1:31;
  unsigned char v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFu8c_BFu31i) C1{ Fi:31 Fc:8 Fi:31}



static void Test_BFu31i_BFu8c_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu8c_BFu31i");
    static STRUCT_IF_C BFu31i_BFu8c_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu8c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_BFu31i, BFu31i_BFu8c_BFu31i)
//============================================================================


struct  BFu31i_BFu8c_BFu31ll  {
  unsigned int v1:31;
  unsigned char v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFu8c_BFu31ll) C1{ Fi:31 Fc:8 FL:31}



static void Test_BFu31i_BFu8c_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu8c_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu8c_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu8c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, 1, "BFu31i_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_BFu31ll, BFu31i_BFu8c_BFu31ll)
//============================================================================


struct  BFu31i_BFu8c_BFu32i  {
  unsigned int v1:31;
  unsigned char v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu31i_BFu8c_BFu32i) C1{ Fi:31 Fc:8 Fi:32}



static void Test_BFu31i_BFu8c_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu8c_BFu32i");
    static STRUCT_IF_C BFu31i_BFu8c_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu8c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu8c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_BFu32i, BFu31i_BFu8c_BFu32i)
//============================================================================


struct  BFu31i_BFu8c_BFu32ll  {
  unsigned int v1:31;
  unsigned char v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_BFu8c_BFu32ll) C1{ Fi:31 Fc:8 FL:32}



static void Test_BFu31i_BFu8c_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu8c_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu8c_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu8c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, 1, "BFu31i_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, hide_ull(1LL<<31), "BFu31i_BFu8c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_BFu32ll, BFu31i_BFu8c_BFu32ll)
//============================================================================


struct  BFu31i_BFu8c_BFu33  {
  unsigned int v1:31;
  unsigned char v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_BFu8c_BFu33) C1{ Fi:31 Fc:8 FL:33}



static void Test_BFu31i_BFu8c_BFu33()
{
  {
    init_simple_test("BFu31i_BFu8c_BFu33");
    static STRUCT_IF_C BFu31i_BFu8c_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu8c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, 1, "BFu31i_BFu8c_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, hide_ull(1LL<<32), "BFu31i_BFu8c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_BFu33, BFu31i_BFu8c_BFu33)
//============================================================================


struct  BFu31i_BFu8c_BFu7c  {
  unsigned int v1:31;
  unsigned char v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu31i_BFu8c_BFu7c) C1{ Fi:31 Fc:8 Fc:7}



static void Test_BFu31i_BFu8c_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu8c_BFu7c");
    static STRUCT_IF_C BFu31i_BFu8c_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu8c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_BFu7c, BFu31i_BFu8c_BFu7c)
//============================================================================


struct  BFu31i_BFu8c_BFu7i  {
  unsigned int v1:31;
  unsigned char v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu31i_BFu8c_BFu7i) C1{ Fi:31 Fc:8 Fi:7}



static void Test_BFu31i_BFu8c_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu8c_BFu7i");
    static STRUCT_IF_C BFu31i_BFu8c_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu8c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_BFu7i, BFu31i_BFu8c_BFu7i)
//============================================================================


struct  BFu31i_BFu8c_BFu7ll  {
  unsigned int v1:31;
  unsigned char v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_BFu8c_BFu7ll) C1{ Fi:31 Fc:8 FL:7}



static void Test_BFu31i_BFu8c_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu8c_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu8c_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu8c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_BFu7ll, BFu31i_BFu8c_BFu7ll)
//============================================================================


struct  BFu31i_BFu8c_BFu7s  {
  unsigned int v1:31;
  unsigned char v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu31i_BFu8c_BFu7s) C1{ Fi:31 Fc:8 Fs:7}



static void Test_BFu31i_BFu8c_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu8c_BFu7s");
    static STRUCT_IF_C BFu31i_BFu8c_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu8c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_BFu7s, BFu31i_BFu8c_BFu7s)
//============================================================================


struct  BFu31i_BFu8c_BFu8c  {
  unsigned int v1:31;
  unsigned char v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu31i_BFu8c_BFu8c) C1{ Fi:31 Fc:8 Fc:8}



static void Test_BFu31i_BFu8c_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu8c_BFu8c");
    static STRUCT_IF_C BFu31i_BFu8c_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_BFu8c, BFu31i_BFu8c_BFu8c)
//============================================================================


struct  BFu31i_BFu8c_BFu8i  {
  unsigned int v1:31;
  unsigned char v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu31i_BFu8c_BFu8i) C1{ Fi:31 Fc:8 Fi:8}



static void Test_BFu31i_BFu8c_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu8c_BFu8i");
    static STRUCT_IF_C BFu31i_BFu8c_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_BFu8i, BFu31i_BFu8c_BFu8i)
//============================================================================


struct  BFu31i_BFu8c_BFu8ll  {
  unsigned int v1:31;
  unsigned char v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_BFu8c_BFu8ll) C1{ Fi:31 Fc:8 FL:8}



static void Test_BFu31i_BFu8c_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu8c_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu8c_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_BFu8ll, BFu31i_BFu8c_BFu8ll)
//============================================================================


struct  BFu31i_BFu8c_BFu8s  {
  unsigned int v1:31;
  unsigned char v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu31i_BFu8c_BFu8s) C1{ Fi:31 Fc:8 Fs:8}



static void Test_BFu31i_BFu8c_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu8c_BFu8s");
    static STRUCT_IF_C BFu31i_BFu8c_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_BFu8s, BFu31i_BFu8c_BFu8s)
//============================================================================


struct  BFu31i_BFu8c_BFu9i  {
  unsigned int v1:31;
  unsigned char v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu31i_BFu8c_BFu9i) C1{ Fi:31 Fc:8 Fi:9}



static void Test_BFu31i_BFu8c_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu8c_BFu9i");
    static STRUCT_IF_C BFu31i_BFu8c_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu31i_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu8c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_BFu9i, BFu31i_BFu8c_BFu9i)
//============================================================================


struct  BFu31i_BFu8c_BFu9ll  {
  unsigned int v1:31;
  unsigned char v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_BFu8c_BFu9ll) C1{ Fi:31 Fc:8 FL:9}



static void Test_BFu31i_BFu8c_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu8c_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu8c_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu31i_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu8c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_BFu9ll, BFu31i_BFu8c_BFu9ll)
//============================================================================


struct  BFu31i_BFu8c_BFu9s  {
  unsigned int v1:31;
  unsigned char v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu31i_BFu8c_BFu9s) C1{ Fi:31 Fc:8 Fs:9}



static void Test_BFu31i_BFu8c_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu8c_BFu9s");
    static STRUCT_IF_C BFu31i_BFu8c_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31i_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu8c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_BFu9s, BFu31i_BFu8c_BFu9s)
//============================================================================


struct  BFu31i_BFu8c_C  {
  unsigned int v1:31;
  unsigned char v2:8;
  char v3;
};
//SIG(1 BFu31i_BFu8c_C) C1{ Fi:31 Fc:8 Fc}



static void Test_BFu31i_BFu8c_C()
{
  {
    init_simple_test("BFu31i_BFu8c_C");
    static STRUCT_IF_C BFu31i_BFu8c_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8c_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_C");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_C");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_C");
    check_field_offset(lv, v3, 5, "BFu31i_BFu8c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_C, BFu31i_BFu8c_C)
//============================================================================


struct  BFu31i_BFu8c_D  {
  unsigned int v1:31;
  unsigned char v2:8;
  double v3;
};
//SIG(1 BFu31i_BFu8c_D) C1{ Fi:31 Fc:8 FL}



static void Test_BFu31i_BFu8c_D()
{
  {
    init_simple_test("BFu31i_BFu8c_D");
    static STRUCT_IF_C BFu31i_BFu8c_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu8c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8c_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_D");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_D");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_D");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_D, BFu31i_BFu8c_D)
//============================================================================


struct  BFu31i_BFu8c_F  {
  unsigned int v1:31;
  unsigned char v2:8;
  float v3;
};
//SIG(1 BFu31i_BFu8c_F) C1{ Fi:31 Fc:8 Fi}



static void Test_BFu31i_BFu8c_F()
{
  {
    init_simple_test("BFu31i_BFu8c_F");
    static STRUCT_IF_C BFu31i_BFu8c_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu8c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8c_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_F");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_F");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_F");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_F, BFu31i_BFu8c_F)
//============================================================================


struct  BFu31i_BFu8c_I  {
  unsigned int v1:31;
  unsigned char v2:8;
  int v3;
};
//SIG(1 BFu31i_BFu8c_I) C1{ Fi:31 Fc:8 Fi}



static void Test_BFu31i_BFu8c_I()
{
  {
    init_simple_test("BFu31i_BFu8c_I");
    static STRUCT_IF_C BFu31i_BFu8c_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu8c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8c_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_I");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_I");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_I");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_I, BFu31i_BFu8c_I)
//============================================================================


struct  BFu31i_BFu8c_Ip  {
  unsigned int v1:31;
  unsigned char v2:8;
  int *v3;
};
//SIG(1 BFu31i_BFu8c_Ip) C1{ Fi:31 Fc:8 Fp}



static void Test_BFu31i_BFu8c_Ip()
{
  {
    init_simple_test("BFu31i_BFu8c_Ip");
    static STRUCT_IF_C BFu31i_BFu8c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu8c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_Ip");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_Ip");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_Ip");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_Ip, BFu31i_BFu8c_Ip)
//============================================================================


struct  BFu31i_BFu8c_L  {
  unsigned int v1:31;
  unsigned char v2:8;
  __tsi64 v3;
};
//SIG(1 BFu31i_BFu8c_L) C1{ Fi:31 Fc:8 FL}



static void Test_BFu31i_BFu8c_L()
{
  {
    init_simple_test("BFu31i_BFu8c_L");
    static STRUCT_IF_C BFu31i_BFu8c_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu8c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8c_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_L");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_L");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_L");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_L, BFu31i_BFu8c_L)
//============================================================================


struct  BFu31i_BFu8c_S  {
  unsigned int v1:31;
  unsigned char v2:8;
  short v3;
};
//SIG(1 BFu31i_BFu8c_S) C1{ Fi:31 Fc:8 Fs}



static void Test_BFu31i_BFu8c_S()
{
  {
    init_simple_test("BFu31i_BFu8c_S");
    static STRUCT_IF_C BFu31i_BFu8c_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8c_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_S");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_S");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_S");
    check_field_offset(lv, v3, 6, "BFu31i_BFu8c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_S, BFu31i_BFu8c_S)
//============================================================================


struct  BFu31i_BFu8c_Uc  {
  unsigned int v1:31;
  unsigned char v2:8;
  unsigned char v3;
};
//SIG(1 BFu31i_BFu8c_Uc) C1{ Fi:31 Fc:8 Fc}



static void Test_BFu31i_BFu8c_Uc()
{
  {
    init_simple_test("BFu31i_BFu8c_Uc");
    static STRUCT_IF_C BFu31i_BFu8c_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_Uc");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_Uc");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_Uc");
    check_field_offset(lv, v3, 5, "BFu31i_BFu8c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_Uc, BFu31i_BFu8c_Uc)
//============================================================================


struct  BFu31i_BFu8c_Ui  {
  unsigned int v1:31;
  unsigned char v2:8;
  unsigned int v3;
};
//SIG(1 BFu31i_BFu8c_Ui) C1{ Fi:31 Fc:8 Fi}



static void Test_BFu31i_BFu8c_Ui()
{
  {
    init_simple_test("BFu31i_BFu8c_Ui");
    static STRUCT_IF_C BFu31i_BFu8c_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu8c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_Ui");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_Ui");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_Ui");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_Ui, BFu31i_BFu8c_Ui)
//============================================================================


struct  BFu31i_BFu8c_Ul  {
  unsigned int v1:31;
  unsigned char v2:8;
  __tsu64 v3;
};
//SIG(1 BFu31i_BFu8c_Ul) C1{ Fi:31 Fc:8 FL}



static void Test_BFu31i_BFu8c_Ul()
{
  {
    init_simple_test("BFu31i_BFu8c_Ul");
    static STRUCT_IF_C BFu31i_BFu8c_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu8c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_Ul");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_Ul");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_Ul");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_Ul, BFu31i_BFu8c_Ul)
//============================================================================


struct  BFu31i_BFu8c_Us  {
  unsigned int v1:31;
  unsigned char v2:8;
  unsigned short v3;
};
//SIG(1 BFu31i_BFu8c_Us) C1{ Fi:31 Fc:8 Fs}



static void Test_BFu31i_BFu8c_Us()
{
  {
    init_simple_test("BFu31i_BFu8c_Us");
    static STRUCT_IF_C BFu31i_BFu8c_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_Us");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_Us");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_Us");
    check_field_offset(lv, v3, 6, "BFu31i_BFu8c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_Us, BFu31i_BFu8c_Us)
//============================================================================


struct  BFu31i_BFu8c_Vp  {
  unsigned int v1:31;
  unsigned char v2:8;
  void *v3;
};
//SIG(1 BFu31i_BFu8c_Vp) C1{ Fi:31 Fc:8 Fp}



static void Test_BFu31i_BFu8c_Vp()
{
  {
    init_simple_test("BFu31i_BFu8c_Vp");
    static STRUCT_IF_C BFu31i_BFu8c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu8c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_Vp");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_Vp");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_Vp");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8c_Vp, BFu31i_BFu8c_Vp)
//============================================================================


struct  BFu31i_BFu8i  {
  unsigned int v1:31;
  unsigned int v2:8;
};
//SIG(1 BFu31i_BFu8i) C1{ Fi:31 Fi:8}



static void Test_BFu31i_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu8i");
    static STRUCT_IF_C BFu31i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i, BFu31i_BFu8i)
//============================================================================


struct  BFu31i_BFu8i_BFu15i  {
  unsigned int v1:31;
  unsigned int v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu31i_BFu8i_BFu15i) C1{ Fi:31 Fi:8 Fi:15}



static void Test_BFu31i_BFu8i_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu8i_BFu15i");
    static STRUCT_IF_C BFu31i_BFu8i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu31i_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu8i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_BFu15i, BFu31i_BFu8i_BFu15i)
//============================================================================


struct  BFu31i_BFu8i_BFu15ll  {
  unsigned int v1:31;
  unsigned int v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_BFu8i_BFu15ll) C1{ Fi:31 Fi:8 FL:15}



static void Test_BFu31i_BFu8i_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu8i_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu8i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu31i_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu8i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_BFu15ll, BFu31i_BFu8i_BFu15ll)
//============================================================================


struct  BFu31i_BFu8i_BFu15s  {
  unsigned int v1:31;
  unsigned int v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu31i_BFu8i_BFu15s) C1{ Fi:31 Fi:8 Fs:15}



static void Test_BFu31i_BFu8i_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu8i_BFu15s");
    static STRUCT_IF_C BFu31i_BFu8i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu8i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_BFu15s, BFu31i_BFu8i_BFu15s)
//============================================================================


struct  BFu31i_BFu8i_BFu16i  {
  unsigned int v1:31;
  unsigned int v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu31i_BFu8i_BFu16i) C1{ Fi:31 Fi:8 Fi:16}



static void Test_BFu31i_BFu8i_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu8i_BFu16i");
    static STRUCT_IF_C BFu31i_BFu8i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu31i_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu8i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_BFu16i, BFu31i_BFu8i_BFu16i)
//============================================================================


struct  BFu31i_BFu8i_BFu16ll  {
  unsigned int v1:31;
  unsigned int v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_BFu8i_BFu16ll) C1{ Fi:31 Fi:8 FL:16}



static void Test_BFu31i_BFu8i_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu8i_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu8i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu31i_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu8i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_BFu16ll, BFu31i_BFu8i_BFu16ll)
//============================================================================


struct  BFu31i_BFu8i_BFu16s  {
  unsigned int v1:31;
  unsigned int v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu31i_BFu8i_BFu16s) C1{ Fi:31 Fi:8 Fs:16}



static void Test_BFu31i_BFu8i_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu8i_BFu16s");
    static STRUCT_IF_C BFu31i_BFu8i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu8i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_BFu16s, BFu31i_BFu8i_BFu16s)
//============================================================================


struct  BFu31i_BFu8i_BFu17i  {
  unsigned int v1:31;
  unsigned int v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu31i_BFu8i_BFu17i) C1{ Fi:31 Fi:8 Fi:17}



static void Test_BFu31i_BFu8i_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu8i_BFu17i");
    static STRUCT_IF_C BFu31i_BFu8i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu31i_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu8i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_BFu17i, BFu31i_BFu8i_BFu17i)
//============================================================================


struct  BFu31i_BFu8i_BFu17ll  {
  unsigned int v1:31;
  unsigned int v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_BFu8i_BFu17ll) C1{ Fi:31 Fi:8 FL:17}



static void Test_BFu31i_BFu8i_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu8i_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu8i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu31i_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu8i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_BFu17ll, BFu31i_BFu8i_BFu17ll)
//============================================================================


struct  BFu31i_BFu8i_BFu1c  {
  unsigned int v1:31;
  unsigned int v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu31i_BFu8i_BFu1c) C1{ Fi:31 Fi:8 Fc:1}



static void Test_BFu31i_BFu8i_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu8i_BFu1c");
    static STRUCT_IF_C BFu31i_BFu8i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu1c");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31i_BFu8i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_BFu1c, BFu31i_BFu8i_BFu1c)
//============================================================================


struct  BFu31i_BFu8i_BFu1i  {
  unsigned int v1:31;
  unsigned int v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu31i_BFu8i_BFu1i) C1{ Fi:31 Fi:8 Fi:1}



static void Test_BFu31i_BFu8i_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu8i_BFu1i");
    static STRUCT_IF_C BFu31i_BFu8i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu1i");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31i_BFu8i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_BFu1i, BFu31i_BFu8i_BFu1i)
//============================================================================


struct  BFu31i_BFu8i_BFu1ll  {
  unsigned int v1:31;
  unsigned int v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_BFu8i_BFu1ll) C1{ Fi:31 Fi:8 FL:1}



static void Test_BFu31i_BFu8i_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu8i_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu8i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu1ll");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31i_BFu8i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_BFu1ll, BFu31i_BFu8i_BFu1ll)
//============================================================================


struct  BFu31i_BFu8i_BFu1s  {
  unsigned int v1:31;
  unsigned int v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu31i_BFu8i_BFu1s) C1{ Fi:31 Fi:8 Fs:1}



static void Test_BFu31i_BFu8i_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu8i_BFu1s");
    static STRUCT_IF_C BFu31i_BFu8i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu1s");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31i_BFu8i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_BFu1s, BFu31i_BFu8i_BFu1s)
//============================================================================


struct  BFu31i_BFu8i_BFu31i  {
  unsigned int v1:31;
  unsigned int v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFu8i_BFu31i) C1{ Fi:31 Fi:8 Fi:31}



static void Test_BFu31i_BFu8i_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu8i_BFu31i");
    static STRUCT_IF_C BFu31i_BFu8i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu8i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_BFu31i, BFu31i_BFu8i_BFu31i)
//============================================================================


struct  BFu31i_BFu8i_BFu31ll  {
  unsigned int v1:31;
  unsigned int v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFu8i_BFu31ll) C1{ Fi:31 Fi:8 FL:31}



static void Test_BFu31i_BFu8i_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu8i_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu8i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu8i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, 1, "BFu31i_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_BFu31ll, BFu31i_BFu8i_BFu31ll)
//============================================================================


struct  BFu31i_BFu8i_BFu32i  {
  unsigned int v1:31;
  unsigned int v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu31i_BFu8i_BFu32i) C1{ Fi:31 Fi:8 Fi:32}



static void Test_BFu31i_BFu8i_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu8i_BFu32i");
    static STRUCT_IF_C BFu31i_BFu8i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu8i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu8i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_BFu32i, BFu31i_BFu8i_BFu32i)
//============================================================================


struct  BFu31i_BFu8i_BFu32ll  {
  unsigned int v1:31;
  unsigned int v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_BFu8i_BFu32ll) C1{ Fi:31 Fi:8 FL:32}



static void Test_BFu31i_BFu8i_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu8i_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu8i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu8i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, 1, "BFu31i_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, hide_ull(1LL<<31), "BFu31i_BFu8i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_BFu32ll, BFu31i_BFu8i_BFu32ll)
//============================================================================


struct  BFu31i_BFu8i_BFu33  {
  unsigned int v1:31;
  unsigned int v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_BFu8i_BFu33) C1{ Fi:31 Fi:8 FL:33}



static void Test_BFu31i_BFu8i_BFu33()
{
  {
    init_simple_test("BFu31i_BFu8i_BFu33");
    static STRUCT_IF_C BFu31i_BFu8i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu8i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, 1, "BFu31i_BFu8i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, hide_ull(1LL<<32), "BFu31i_BFu8i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_BFu33, BFu31i_BFu8i_BFu33)
//============================================================================


struct  BFu31i_BFu8i_BFu7c  {
  unsigned int v1:31;
  unsigned int v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu31i_BFu8i_BFu7c) C1{ Fi:31 Fi:8 Fc:7}



static void Test_BFu31i_BFu8i_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu8i_BFu7c");
    static STRUCT_IF_C BFu31i_BFu8i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu8i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_BFu7c, BFu31i_BFu8i_BFu7c)
//============================================================================


struct  BFu31i_BFu8i_BFu7i  {
  unsigned int v1:31;
  unsigned int v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu31i_BFu8i_BFu7i) C1{ Fi:31 Fi:8 Fi:7}



static void Test_BFu31i_BFu8i_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu8i_BFu7i");
    static STRUCT_IF_C BFu31i_BFu8i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu8i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_BFu7i, BFu31i_BFu8i_BFu7i)
//============================================================================


struct  BFu31i_BFu8i_BFu7ll  {
  unsigned int v1:31;
  unsigned int v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_BFu8i_BFu7ll) C1{ Fi:31 Fi:8 FL:7}



static void Test_BFu31i_BFu8i_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu8i_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu8i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu8i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_BFu7ll, BFu31i_BFu8i_BFu7ll)
//============================================================================


struct  BFu31i_BFu8i_BFu7s  {
  unsigned int v1:31;
  unsigned int v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu31i_BFu8i_BFu7s) C1{ Fi:31 Fi:8 Fs:7}



static void Test_BFu31i_BFu8i_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu8i_BFu7s");
    static STRUCT_IF_C BFu31i_BFu8i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu8i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_BFu7s, BFu31i_BFu8i_BFu7s)
//============================================================================


struct  BFu31i_BFu8i_BFu8c  {
  unsigned int v1:31;
  unsigned int v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu31i_BFu8i_BFu8c) C1{ Fi:31 Fi:8 Fc:8}



static void Test_BFu31i_BFu8i_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu8i_BFu8c");
    static STRUCT_IF_C BFu31i_BFu8i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_BFu8c, BFu31i_BFu8i_BFu8c)
//============================================================================


struct  BFu31i_BFu8i_BFu8i  {
  unsigned int v1:31;
  unsigned int v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu31i_BFu8i_BFu8i) C1{ Fi:31 Fi:8 Fi:8}



static void Test_BFu31i_BFu8i_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu8i_BFu8i");
    static STRUCT_IF_C BFu31i_BFu8i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_BFu8i, BFu31i_BFu8i_BFu8i)
//============================================================================


struct  BFu31i_BFu8i_BFu8ll  {
  unsigned int v1:31;
  unsigned int v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_BFu8i_BFu8ll) C1{ Fi:31 Fi:8 FL:8}



static void Test_BFu31i_BFu8i_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu8i_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu8i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_BFu8ll, BFu31i_BFu8i_BFu8ll)
//============================================================================


struct  BFu31i_BFu8i_BFu8s  {
  unsigned int v1:31;
  unsigned int v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu31i_BFu8i_BFu8s) C1{ Fi:31 Fi:8 Fs:8}



static void Test_BFu31i_BFu8i_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu8i_BFu8s");
    static STRUCT_IF_C BFu31i_BFu8i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_BFu8s, BFu31i_BFu8i_BFu8s)
//============================================================================


struct  BFu31i_BFu8i_BFu9i  {
  unsigned int v1:31;
  unsigned int v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu31i_BFu8i_BFu9i) C1{ Fi:31 Fi:8 Fi:9}



static void Test_BFu31i_BFu8i_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu8i_BFu9i");
    static STRUCT_IF_C BFu31i_BFu8i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu31i_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu8i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_BFu9i, BFu31i_BFu8i_BFu9i)
//============================================================================


struct  BFu31i_BFu8i_BFu9ll  {
  unsigned int v1:31;
  unsigned int v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_BFu8i_BFu9ll) C1{ Fi:31 Fi:8 FL:9}



static void Test_BFu31i_BFu8i_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu8i_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu8i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu31i_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu8i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_BFu9ll, BFu31i_BFu8i_BFu9ll)
//============================================================================


struct  BFu31i_BFu8i_BFu9s  {
  unsigned int v1:31;
  unsigned int v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu31i_BFu8i_BFu9s) C1{ Fi:31 Fi:8 Fs:9}



static void Test_BFu31i_BFu8i_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu8i_BFu9s");
    static STRUCT_IF_C BFu31i_BFu8i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31i_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu8i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_BFu9s, BFu31i_BFu8i_BFu9s)
//============================================================================


struct  BFu31i_BFu8i_C  {
  unsigned int v1:31;
  unsigned int v2:8;
  char v3;
};
//SIG(1 BFu31i_BFu8i_C) C1{ Fi:31 Fi:8 Fc}



static void Test_BFu31i_BFu8i_C()
{
  {
    init_simple_test("BFu31i_BFu8i_C");
    static STRUCT_IF_C BFu31i_BFu8i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8i_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_C");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_C");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_C");
    check_field_offset(lv, v3, 5, "BFu31i_BFu8i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_C, BFu31i_BFu8i_C)
//============================================================================


struct  BFu31i_BFu8i_D  {
  unsigned int v1:31;
  unsigned int v2:8;
  double v3;
};
//SIG(1 BFu31i_BFu8i_D) C1{ Fi:31 Fi:8 FL}



static void Test_BFu31i_BFu8i_D()
{
  {
    init_simple_test("BFu31i_BFu8i_D");
    static STRUCT_IF_C BFu31i_BFu8i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu8i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8i_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_D");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_D");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_D");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_D, BFu31i_BFu8i_D)
//============================================================================


struct  BFu31i_BFu8i_F  {
  unsigned int v1:31;
  unsigned int v2:8;
  float v3;
};
//SIG(1 BFu31i_BFu8i_F) C1{ Fi:31 Fi:8 Fi}



static void Test_BFu31i_BFu8i_F()
{
  {
    init_simple_test("BFu31i_BFu8i_F");
    static STRUCT_IF_C BFu31i_BFu8i_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu8i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8i_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_F");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_F");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_F");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_F, BFu31i_BFu8i_F)
//============================================================================


struct  BFu31i_BFu8i_I  {
  unsigned int v1:31;
  unsigned int v2:8;
  int v3;
};
//SIG(1 BFu31i_BFu8i_I) C1{ Fi:31 Fi:8 Fi}



static void Test_BFu31i_BFu8i_I()
{
  {
    init_simple_test("BFu31i_BFu8i_I");
    static STRUCT_IF_C BFu31i_BFu8i_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu8i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8i_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_I");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_I");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_I");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_I, BFu31i_BFu8i_I)
//============================================================================


struct  BFu31i_BFu8i_Ip  {
  unsigned int v1:31;
  unsigned int v2:8;
  int *v3;
};
//SIG(1 BFu31i_BFu8i_Ip) C1{ Fi:31 Fi:8 Fp}



static void Test_BFu31i_BFu8i_Ip()
{
  {
    init_simple_test("BFu31i_BFu8i_Ip");
    static STRUCT_IF_C BFu31i_BFu8i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu8i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_Ip");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_Ip, BFu31i_BFu8i_Ip)
//============================================================================


struct  BFu31i_BFu8i_L  {
  unsigned int v1:31;
  unsigned int v2:8;
  __tsi64 v3;
};
//SIG(1 BFu31i_BFu8i_L) C1{ Fi:31 Fi:8 FL}



static void Test_BFu31i_BFu8i_L()
{
  {
    init_simple_test("BFu31i_BFu8i_L");
    static STRUCT_IF_C BFu31i_BFu8i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu8i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8i_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_L");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_L");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_L");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_L, BFu31i_BFu8i_L)
//============================================================================


struct  BFu31i_BFu8i_S  {
  unsigned int v1:31;
  unsigned int v2:8;
  short v3;
};
//SIG(1 BFu31i_BFu8i_S) C1{ Fi:31 Fi:8 Fs}



static void Test_BFu31i_BFu8i_S()
{
  {
    init_simple_test("BFu31i_BFu8i_S");
    static STRUCT_IF_C BFu31i_BFu8i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8i_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_S");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_S");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_S");
    check_field_offset(lv, v3, 6, "BFu31i_BFu8i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_S, BFu31i_BFu8i_S)
//============================================================================


struct  BFu31i_BFu8i_Uc  {
  unsigned int v1:31;
  unsigned int v2:8;
  unsigned char v3;
};
//SIG(1 BFu31i_BFu8i_Uc) C1{ Fi:31 Fi:8 Fc}



static void Test_BFu31i_BFu8i_Uc()
{
  {
    init_simple_test("BFu31i_BFu8i_Uc");
    static STRUCT_IF_C BFu31i_BFu8i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_Uc");
    check_field_offset(lv, v3, 5, "BFu31i_BFu8i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_Uc, BFu31i_BFu8i_Uc)
//============================================================================


struct  BFu31i_BFu8i_Ui  {
  unsigned int v1:31;
  unsigned int v2:8;
  unsigned int v3;
};
//SIG(1 BFu31i_BFu8i_Ui) C1{ Fi:31 Fi:8 Fi}



static void Test_BFu31i_BFu8i_Ui()
{
  {
    init_simple_test("BFu31i_BFu8i_Ui");
    static STRUCT_IF_C BFu31i_BFu8i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu8i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_Ui");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_Ui, BFu31i_BFu8i_Ui)
//============================================================================


struct  BFu31i_BFu8i_Ul  {
  unsigned int v1:31;
  unsigned int v2:8;
  __tsu64 v3;
};
//SIG(1 BFu31i_BFu8i_Ul) C1{ Fi:31 Fi:8 FL}



static void Test_BFu31i_BFu8i_Ul()
{
  {
    init_simple_test("BFu31i_BFu8i_Ul");
    static STRUCT_IF_C BFu31i_BFu8i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu8i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_Ul");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_Ul, BFu31i_BFu8i_Ul)
//============================================================================


struct  BFu31i_BFu8i_Us  {
  unsigned int v1:31;
  unsigned int v2:8;
  unsigned short v3;
};
//SIG(1 BFu31i_BFu8i_Us) C1{ Fi:31 Fi:8 Fs}



static void Test_BFu31i_BFu8i_Us()
{
  {
    init_simple_test("BFu31i_BFu8i_Us");
    static STRUCT_IF_C BFu31i_BFu8i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_Us");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_Us");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_Us");
    check_field_offset(lv, v3, 6, "BFu31i_BFu8i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_Us, BFu31i_BFu8i_Us)
//============================================================================


struct  BFu31i_BFu8i_Vp  {
  unsigned int v1:31;
  unsigned int v2:8;
  void *v3;
};
//SIG(1 BFu31i_BFu8i_Vp) C1{ Fi:31 Fi:8 Fp}



static void Test_BFu31i_BFu8i_Vp()
{
  {
    init_simple_test("BFu31i_BFu8i_Vp");
    static STRUCT_IF_C BFu31i_BFu8i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu8i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_Vp");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8i_Vp, BFu31i_BFu8i_Vp)
//============================================================================


struct  BFu31i_BFu8ll  {
  unsigned int v1:31;
  __tsu64 v2:8;
};
//SIG(1 BFu31i_BFu8ll) C1{ Fi:31 FL:8}



static void Test_BFu31i_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll, BFu31i_BFu8ll)
//============================================================================


struct  BFu31i_BFu8ll_BFu15i  {
  unsigned int v1:31;
  __tsu64 v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu31i_BFu8ll_BFu15i) C1{ Fi:31 FL:8 Fi:15}



static void Test_BFu31i_BFu8ll_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu8ll_BFu15i");
    static STRUCT_IF_C BFu31i_BFu8ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 7, 15, 1, "BFu31i_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu8ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_BFu15i, BFu31i_BFu8ll_BFu15i)
//============================================================================


struct  BFu31i_BFu8ll_BFu15ll  {
  unsigned int v1:31;
  __tsu64 v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_BFu8ll_BFu15ll) C1{ Fi:31 FL:8 FL:15}



static void Test_BFu31i_BFu8ll_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu8ll_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu8ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 7, 15, 1, "BFu31i_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu8ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_BFu15ll, BFu31i_BFu8ll_BFu15ll)
//============================================================================


struct  BFu31i_BFu8ll_BFu15s  {
  unsigned int v1:31;
  __tsu64 v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu31i_BFu8ll_BFu15s) C1{ Fi:31 FL:8 Fs:15}



static void Test_BFu31i_BFu8ll_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu8ll_BFu15s");
    static STRUCT_IF_C BFu31i_BFu8ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu8ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_BFu15s, BFu31i_BFu8ll_BFu15s)
//============================================================================


struct  BFu31i_BFu8ll_BFu16i  {
  unsigned int v1:31;
  __tsu64 v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu31i_BFu8ll_BFu16i) C1{ Fi:31 FL:8 Fi:16}



static void Test_BFu31i_BFu8ll_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu8ll_BFu16i");
    static STRUCT_IF_C BFu31i_BFu8ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 7, 16, 1, "BFu31i_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu8ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_BFu16i, BFu31i_BFu8ll_BFu16i)
//============================================================================


struct  BFu31i_BFu8ll_BFu16ll  {
  unsigned int v1:31;
  __tsu64 v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_BFu8ll_BFu16ll) C1{ Fi:31 FL:8 FL:16}



static void Test_BFu31i_BFu8ll_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu8ll_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu8ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 7, 16, 1, "BFu31i_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu8ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_BFu16ll, BFu31i_BFu8ll_BFu16ll)
//============================================================================


struct  BFu31i_BFu8ll_BFu16s  {
  unsigned int v1:31;
  __tsu64 v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu31i_BFu8ll_BFu16s) C1{ Fi:31 FL:8 Fs:16}



static void Test_BFu31i_BFu8ll_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu8ll_BFu16s");
    static STRUCT_IF_C BFu31i_BFu8ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu8ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_BFu16s, BFu31i_BFu8ll_BFu16s)
//============================================================================


struct  BFu31i_BFu8ll_BFu17i  {
  unsigned int v1:31;
  __tsu64 v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu31i_BFu8ll_BFu17i) C1{ Fi:31 FL:8 Fi:17}



static void Test_BFu31i_BFu8ll_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu8ll_BFu17i");
    static STRUCT_IF_C BFu31i_BFu8ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 7, 17, 1, "BFu31i_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu8ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_BFu17i, BFu31i_BFu8ll_BFu17i)
//============================================================================


struct  BFu31i_BFu8ll_BFu17ll  {
  unsigned int v1:31;
  __tsu64 v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_BFu8ll_BFu17ll) C1{ Fi:31 FL:8 FL:17}



static void Test_BFu31i_BFu8ll_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu8ll_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu8ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 7, 17, 1, "BFu31i_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu8ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_BFu17ll, BFu31i_BFu8ll_BFu17ll)
//============================================================================


struct  BFu31i_BFu8ll_BFu1c  {
  unsigned int v1:31;
  __tsu64 v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu31i_BFu8ll_BFu1c) C1{ Fi:31 FL:8 Fc:1}



static void Test_BFu31i_BFu8ll_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu8ll_BFu1c");
    static STRUCT_IF_C BFu31i_BFu8ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu1c");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu31i_BFu8ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_BFu1c, BFu31i_BFu8ll_BFu1c)
//============================================================================


struct  BFu31i_BFu8ll_BFu1i  {
  unsigned int v1:31;
  __tsu64 v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu31i_BFu8ll_BFu1i) C1{ Fi:31 FL:8 Fi:1}



static void Test_BFu31i_BFu8ll_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu8ll_BFu1i");
    static STRUCT_IF_C BFu31i_BFu8ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu1i");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu31i_BFu8ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_BFu1i, BFu31i_BFu8ll_BFu1i)
//============================================================================


struct  BFu31i_BFu8ll_BFu1ll  {
  unsigned int v1:31;
  __tsu64 v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_BFu8ll_BFu1ll) C1{ Fi:31 FL:8 FL:1}



static void Test_BFu31i_BFu8ll_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu8ll_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu8ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu31i_BFu8ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_BFu1ll, BFu31i_BFu8ll_BFu1ll)
//============================================================================


struct  BFu31i_BFu8ll_BFu1s  {
  unsigned int v1:31;
  __tsu64 v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu31i_BFu8ll_BFu1s) C1{ Fi:31 FL:8 Fs:1}



static void Test_BFu31i_BFu8ll_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu8ll_BFu1s");
    static STRUCT_IF_C BFu31i_BFu8ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu1s");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu31i_BFu8ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_BFu1s, BFu31i_BFu8ll_BFu1s)
//============================================================================


struct  BFu31i_BFu8ll_BFu31i  {
  unsigned int v1:31;
  __tsu64 v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFu8ll_BFu31i) C1{ Fi:31 FL:8 Fi:31}



static void Test_BFu31i_BFu8ll_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu8ll_BFu31i");
    static STRUCT_IF_C BFu31i_BFu8ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu8ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_BFu31i, BFu31i_BFu8ll_BFu31i)
//============================================================================


struct  BFu31i_BFu8ll_BFu31ll  {
  unsigned int v1:31;
  __tsu64 v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFu8ll_BFu31ll) C1{ Fi:31 FL:8 FL:31}



static void Test_BFu31i_BFu8ll_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu8ll_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu8ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu8ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 31, 1, "BFu31i_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_BFu31ll, BFu31i_BFu8ll_BFu31ll)
//============================================================================


struct  BFu31i_BFu8ll_BFu32i  {
  unsigned int v1:31;
  __tsu64 v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu31i_BFu8ll_BFu32i) C1{ Fi:31 FL:8 Fi:32}



static void Test_BFu31i_BFu8ll_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu8ll_BFu32i");
    static STRUCT_IF_C BFu31i_BFu8ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu8ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu8ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_BFu32i, BFu31i_BFu8ll_BFu32i)
//============================================================================


struct  BFu31i_BFu8ll_BFu32ll  {
  unsigned int v1:31;
  __tsu64 v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_BFu8ll_BFu32ll) C1{ Fi:31 FL:8 FL:32}



static void Test_BFu31i_BFu8ll_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu8ll_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu8ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu8ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 32, 1, "BFu31i_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu31i_BFu8ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_BFu32ll, BFu31i_BFu8ll_BFu32ll)
//============================================================================


struct  BFu31i_BFu8ll_BFu33  {
  unsigned int v1:31;
  __tsu64 v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_BFu8ll_BFu33) C1{ Fi:31 FL:8 FL:33}



static void Test_BFu31i_BFu8ll_BFu33()
{
  {
    init_simple_test("BFu31i_BFu8ll_BFu33");
    static STRUCT_IF_C BFu31i_BFu8ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu8ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 33, 1, "BFu31i_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu31i_BFu8ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_BFu33, BFu31i_BFu8ll_BFu33)
//============================================================================


struct  BFu31i_BFu8ll_BFu7c  {
  unsigned int v1:31;
  __tsu64 v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu31i_BFu8ll_BFu7c) C1{ Fi:31 FL:8 Fc:7}



static void Test_BFu31i_BFu8ll_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu8ll_BFu7c");
    static STRUCT_IF_C BFu31i_BFu8ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu8ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_BFu7c, BFu31i_BFu8ll_BFu7c)
//============================================================================


struct  BFu31i_BFu8ll_BFu7i  {
  unsigned int v1:31;
  __tsu64 v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu31i_BFu8ll_BFu7i) C1{ Fi:31 FL:8 Fi:7}



static void Test_BFu31i_BFu8ll_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu8ll_BFu7i");
    static STRUCT_IF_C BFu31i_BFu8ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "BFu31i_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu8ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_BFu7i, BFu31i_BFu8ll_BFu7i)
//============================================================================


struct  BFu31i_BFu8ll_BFu7ll  {
  unsigned int v1:31;
  __tsu64 v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_BFu8ll_BFu7ll) C1{ Fi:31 FL:8 FL:7}



static void Test_BFu31i_BFu8ll_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu8ll_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu8ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "BFu31i_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu8ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_BFu7ll, BFu31i_BFu8ll_BFu7ll)
//============================================================================


struct  BFu31i_BFu8ll_BFu7s  {
  unsigned int v1:31;
  __tsu64 v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu31i_BFu8ll_BFu7s) C1{ Fi:31 FL:8 Fs:7}



static void Test_BFu31i_BFu8ll_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu8ll_BFu7s");
    static STRUCT_IF_C BFu31i_BFu8ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "BFu31i_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu8ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_BFu7s, BFu31i_BFu8ll_BFu7s)
//============================================================================


struct  BFu31i_BFu8ll_BFu8c  {
  unsigned int v1:31;
  __tsu64 v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu31i_BFu8ll_BFu8c) C1{ Fi:31 FL:8 Fc:8}



static void Test_BFu31i_BFu8ll_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu8ll_BFu8c");
    static STRUCT_IF_C BFu31i_BFu8ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_BFu8c, BFu31i_BFu8ll_BFu8c)
//============================================================================


struct  BFu31i_BFu8ll_BFu8i  {
  unsigned int v1:31;
  __tsu64 v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu31i_BFu8ll_BFu8i) C1{ Fi:31 FL:8 Fi:8}



static void Test_BFu31i_BFu8ll_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu8ll_BFu8i");
    static STRUCT_IF_C BFu31i_BFu8ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "BFu31i_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_BFu8i, BFu31i_BFu8ll_BFu8i)
//============================================================================


struct  BFu31i_BFu8ll_BFu8ll  {
  unsigned int v1:31;
  __tsu64 v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_BFu8ll_BFu8ll) C1{ Fi:31 FL:8 FL:8}



static void Test_BFu31i_BFu8ll_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu8ll_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu8ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "BFu31i_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_BFu8ll, BFu31i_BFu8ll_BFu8ll)
//============================================================================


struct  BFu31i_BFu8ll_BFu8s  {
  unsigned int v1:31;
  __tsu64 v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu31i_BFu8ll_BFu8s) C1{ Fi:31 FL:8 Fs:8}



static void Test_BFu31i_BFu8ll_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu8ll_BFu8s");
    static STRUCT_IF_C BFu31i_BFu8ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "BFu31i_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_BFu8s, BFu31i_BFu8ll_BFu8s)
//============================================================================


struct  BFu31i_BFu8ll_BFu9i  {
  unsigned int v1:31;
  __tsu64 v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu31i_BFu8ll_BFu9i) C1{ Fi:31 FL:8 Fi:9}



static void Test_BFu31i_BFu8ll_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu8ll_BFu9i");
    static STRUCT_IF_C BFu31i_BFu8ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "BFu31i_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu8ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_BFu9i, BFu31i_BFu8ll_BFu9i)
//============================================================================


struct  BFu31i_BFu8ll_BFu9ll  {
  unsigned int v1:31;
  __tsu64 v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_BFu8ll_BFu9ll) C1{ Fi:31 FL:8 FL:9}



static void Test_BFu31i_BFu8ll_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu8ll_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu8ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "BFu31i_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu8ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_BFu9ll, BFu31i_BFu8ll_BFu9ll)
//============================================================================


struct  BFu31i_BFu8ll_BFu9s  {
  unsigned int v1:31;
  __tsu64 v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu31i_BFu8ll_BFu9s) C1{ Fi:31 FL:8 Fs:9}



static void Test_BFu31i_BFu8ll_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu8ll_BFu9s");
    static STRUCT_IF_C BFu31i_BFu8ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "BFu31i_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu8ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_BFu9s, BFu31i_BFu8ll_BFu9s)
//============================================================================


struct  BFu31i_BFu8ll_C  {
  unsigned int v1:31;
  __tsu64 v2:8;
  char v3;
};
//SIG(1 BFu31i_BFu8ll_C) C1{ Fi:31 FL:8 Fc}



static void Test_BFu31i_BFu8ll_C()
{
  {
    init_simple_test("BFu31i_BFu8ll_C");
    static STRUCT_IF_C BFu31i_BFu8ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_C");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_C");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_C");
    check_field_offset(lv, v3, 5, "BFu31i_BFu8ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_C, BFu31i_BFu8ll_C)
//============================================================================


struct  BFu31i_BFu8ll_D  {
  unsigned int v1:31;
  __tsu64 v2:8;
  double v3;
};
//SIG(1 BFu31i_BFu8ll_D) C1{ Fi:31 FL:8 FL}



static void Test_BFu31i_BFu8ll_D()
{
  {
    init_simple_test("BFu31i_BFu8ll_D");
    static STRUCT_IF_C BFu31i_BFu8ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu8ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_D");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_D");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_D");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_D, BFu31i_BFu8ll_D)
//============================================================================


struct  BFu31i_BFu8ll_F  {
  unsigned int v1:31;
  __tsu64 v2:8;
  float v3;
};
//SIG(1 BFu31i_BFu8ll_F) C1{ Fi:31 FL:8 Fi}



static void Test_BFu31i_BFu8ll_F()
{
  {
    init_simple_test("BFu31i_BFu8ll_F");
    static STRUCT_IF_C BFu31i_BFu8ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu8ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_F");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_F");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_F");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_F, BFu31i_BFu8ll_F)
//============================================================================


struct  BFu31i_BFu8ll_I  {
  unsigned int v1:31;
  __tsu64 v2:8;
  int v3;
};
//SIG(1 BFu31i_BFu8ll_I) C1{ Fi:31 FL:8 Fi}



static void Test_BFu31i_BFu8ll_I()
{
  {
    init_simple_test("BFu31i_BFu8ll_I");
    static STRUCT_IF_C BFu31i_BFu8ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu8ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_I");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_I");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_I");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_I, BFu31i_BFu8ll_I)
//============================================================================


struct  BFu31i_BFu8ll_Ip  {
  unsigned int v1:31;
  __tsu64 v2:8;
  int *v3;
};
//SIG(1 BFu31i_BFu8ll_Ip) C1{ Fi:31 FL:8 Fp}



static void Test_BFu31i_BFu8ll_Ip()
{
  {
    init_simple_test("BFu31i_BFu8ll_Ip");
    static STRUCT_IF_C BFu31i_BFu8ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu8ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_Ip");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_Ip");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_Ip");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_Ip, BFu31i_BFu8ll_Ip)
//============================================================================


struct  BFu31i_BFu8ll_L  {
  unsigned int v1:31;
  __tsu64 v2:8;
  __tsi64 v3;
};
//SIG(1 BFu31i_BFu8ll_L) C1{ Fi:31 FL:8 FL}



static void Test_BFu31i_BFu8ll_L()
{
  {
    init_simple_test("BFu31i_BFu8ll_L");
    static STRUCT_IF_C BFu31i_BFu8ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu8ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_L");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_L");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_L");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_L, BFu31i_BFu8ll_L)
//============================================================================


struct  BFu31i_BFu8ll_S  {
  unsigned int v1:31;
  __tsu64 v2:8;
  short v3;
};
//SIG(1 BFu31i_BFu8ll_S) C1{ Fi:31 FL:8 Fs}



static void Test_BFu31i_BFu8ll_S()
{
  {
    init_simple_test("BFu31i_BFu8ll_S");
    static STRUCT_IF_C BFu31i_BFu8ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_S");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_S");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_S");
    check_field_offset(lv, v3, 6, "BFu31i_BFu8ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_S, BFu31i_BFu8ll_S)
//============================================================================


struct  BFu31i_BFu8ll_Uc  {
  unsigned int v1:31;
  __tsu64 v2:8;
  unsigned char v3;
};
//SIG(1 BFu31i_BFu8ll_Uc) C1{ Fi:31 FL:8 Fc}



static void Test_BFu31i_BFu8ll_Uc()
{
  {
    init_simple_test("BFu31i_BFu8ll_Uc");
    static STRUCT_IF_C BFu31i_BFu8ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_Uc");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_Uc");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_Uc");
    check_field_offset(lv, v3, 5, "BFu31i_BFu8ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_Uc, BFu31i_BFu8ll_Uc)
//============================================================================


struct  BFu31i_BFu8ll_Ui  {
  unsigned int v1:31;
  __tsu64 v2:8;
  unsigned int v3;
};
//SIG(1 BFu31i_BFu8ll_Ui) C1{ Fi:31 FL:8 Fi}



static void Test_BFu31i_BFu8ll_Ui()
{
  {
    init_simple_test("BFu31i_BFu8ll_Ui");
    static STRUCT_IF_C BFu31i_BFu8ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu8ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_Ui");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_Ui");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_Ui");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_Ui, BFu31i_BFu8ll_Ui)
//============================================================================


struct  BFu31i_BFu8ll_Ul  {
  unsigned int v1:31;
  __tsu64 v2:8;
  __tsu64 v3;
};
//SIG(1 BFu31i_BFu8ll_Ul) C1{ Fi:31 FL:8 FL}



static void Test_BFu31i_BFu8ll_Ul()
{
  {
    init_simple_test("BFu31i_BFu8ll_Ul");
    static STRUCT_IF_C BFu31i_BFu8ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu8ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_Ul");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_Ul");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_Ul");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_Ul, BFu31i_BFu8ll_Ul)
//============================================================================


struct  BFu31i_BFu8ll_Us  {
  unsigned int v1:31;
  __tsu64 v2:8;
  unsigned short v3;
};
//SIG(1 BFu31i_BFu8ll_Us) C1{ Fi:31 FL:8 Fs}



static void Test_BFu31i_BFu8ll_Us()
{
  {
    init_simple_test("BFu31i_BFu8ll_Us");
    static STRUCT_IF_C BFu31i_BFu8ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_Us");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_Us");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_Us");
    check_field_offset(lv, v3, 6, "BFu31i_BFu8ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_Us, BFu31i_BFu8ll_Us)
//============================================================================


struct  BFu31i_BFu8ll_Vp  {
  unsigned int v1:31;
  __tsu64 v2:8;
  void *v3;
};
//SIG(1 BFu31i_BFu8ll_Vp) C1{ Fi:31 FL:8 Fp}



static void Test_BFu31i_BFu8ll_Vp()
{
  {
    init_simple_test("BFu31i_BFu8ll_Vp");
    static STRUCT_IF_C BFu31i_BFu8ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu8ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_Vp");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_Vp");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_Vp");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8ll_Vp, BFu31i_BFu8ll_Vp)
//============================================================================


struct  BFu31i_BFu8s  {
  unsigned int v1:31;
  unsigned short v2:8;
};
//SIG(1 BFu31i_BFu8s) C1{ Fi:31 Fs:8}



static void Test_BFu31i_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu8s");
    static STRUCT_IF_C BFu31i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s, BFu31i_BFu8s)
//============================================================================


struct  BFu31i_BFu8s_BFu15i  {
  unsigned int v1:31;
  unsigned short v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu31i_BFu8s_BFu15i) C1{ Fi:31 Fs:8 Fi:15}



static void Test_BFu31i_BFu8s_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu8s_BFu15i");
    static STRUCT_IF_C BFu31i_BFu8s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu31i_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu8s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_BFu15i, BFu31i_BFu8s_BFu15i)
//============================================================================


struct  BFu31i_BFu8s_BFu15ll  {
  unsigned int v1:31;
  unsigned short v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_BFu8s_BFu15ll) C1{ Fi:31 Fs:8 FL:15}



static void Test_BFu31i_BFu8s_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu8s_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu8s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu31i_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu8s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_BFu15ll, BFu31i_BFu8s_BFu15ll)
//============================================================================


struct  BFu31i_BFu8s_BFu15s  {
  unsigned int v1:31;
  unsigned short v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu31i_BFu8s_BFu15s) C1{ Fi:31 Fs:8 Fs:15}



static void Test_BFu31i_BFu8s_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu8s_BFu15s");
    static STRUCT_IF_C BFu31i_BFu8s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu8s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_BFu15s, BFu31i_BFu8s_BFu15s)
//============================================================================


struct  BFu31i_BFu8s_BFu16i  {
  unsigned int v1:31;
  unsigned short v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu31i_BFu8s_BFu16i) C1{ Fi:31 Fs:8 Fi:16}



static void Test_BFu31i_BFu8s_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu8s_BFu16i");
    static STRUCT_IF_C BFu31i_BFu8s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu31i_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu8s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_BFu16i, BFu31i_BFu8s_BFu16i)
//============================================================================


struct  BFu31i_BFu8s_BFu16ll  {
  unsigned int v1:31;
  unsigned short v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_BFu8s_BFu16ll) C1{ Fi:31 Fs:8 FL:16}



static void Test_BFu31i_BFu8s_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu8s_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu8s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu31i_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu8s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_BFu16ll, BFu31i_BFu8s_BFu16ll)
//============================================================================


struct  BFu31i_BFu8s_BFu16s  {
  unsigned int v1:31;
  unsigned short v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu31i_BFu8s_BFu16s) C1{ Fi:31 Fs:8 Fs:16}



static void Test_BFu31i_BFu8s_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu8s_BFu16s");
    static STRUCT_IF_C BFu31i_BFu8s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu8s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_BFu16s, BFu31i_BFu8s_BFu16s)
//============================================================================


struct  BFu31i_BFu8s_BFu17i  {
  unsigned int v1:31;
  unsigned short v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu31i_BFu8s_BFu17i) C1{ Fi:31 Fs:8 Fi:17}



static void Test_BFu31i_BFu8s_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu8s_BFu17i");
    static STRUCT_IF_C BFu31i_BFu8s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu31i_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu8s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_BFu17i, BFu31i_BFu8s_BFu17i)
//============================================================================


struct  BFu31i_BFu8s_BFu17ll  {
  unsigned int v1:31;
  unsigned short v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_BFu8s_BFu17ll) C1{ Fi:31 Fs:8 FL:17}



static void Test_BFu31i_BFu8s_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu8s_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu8s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu31i_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu8s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_BFu17ll, BFu31i_BFu8s_BFu17ll)
//============================================================================


struct  BFu31i_BFu8s_BFu1c  {
  unsigned int v1:31;
  unsigned short v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu31i_BFu8s_BFu1c) C1{ Fi:31 Fs:8 Fc:1}



static void Test_BFu31i_BFu8s_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu8s_BFu1c");
    static STRUCT_IF_C BFu31i_BFu8s_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu1c");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31i_BFu8s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_BFu1c, BFu31i_BFu8s_BFu1c)
//============================================================================


struct  BFu31i_BFu8s_BFu1i  {
  unsigned int v1:31;
  unsigned short v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu31i_BFu8s_BFu1i) C1{ Fi:31 Fs:8 Fi:1}



static void Test_BFu31i_BFu8s_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu8s_BFu1i");
    static STRUCT_IF_C BFu31i_BFu8s_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu1i");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31i_BFu8s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_BFu1i, BFu31i_BFu8s_BFu1i)
//============================================================================


struct  BFu31i_BFu8s_BFu1ll  {
  unsigned int v1:31;
  unsigned short v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_BFu8s_BFu1ll) C1{ Fi:31 Fs:8 FL:1}



static void Test_BFu31i_BFu8s_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu8s_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu8s_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu1ll");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31i_BFu8s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_BFu1ll, BFu31i_BFu8s_BFu1ll)
//============================================================================


struct  BFu31i_BFu8s_BFu1s  {
  unsigned int v1:31;
  unsigned short v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu31i_BFu8s_BFu1s) C1{ Fi:31 Fs:8 Fs:1}



static void Test_BFu31i_BFu8s_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu8s_BFu1s");
    static STRUCT_IF_C BFu31i_BFu8s_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu1s");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31i_BFu8s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_BFu1s, BFu31i_BFu8s_BFu1s)
//============================================================================


struct  BFu31i_BFu8s_BFu31i  {
  unsigned int v1:31;
  unsigned short v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFu8s_BFu31i) C1{ Fi:31 Fs:8 Fi:31}



static void Test_BFu31i_BFu8s_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu8s_BFu31i");
    static STRUCT_IF_C BFu31i_BFu8s_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu8s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_BFu31i, BFu31i_BFu8s_BFu31i)
//============================================================================


struct  BFu31i_BFu8s_BFu31ll  {
  unsigned int v1:31;
  unsigned short v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFu8s_BFu31ll) C1{ Fi:31 Fs:8 FL:31}



static void Test_BFu31i_BFu8s_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu8s_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu8s_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu8s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, 1, "BFu31i_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_BFu31ll, BFu31i_BFu8s_BFu31ll)
//============================================================================


struct  BFu31i_BFu8s_BFu32i  {
  unsigned int v1:31;
  unsigned short v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu31i_BFu8s_BFu32i) C1{ Fi:31 Fs:8 Fi:32}



static void Test_BFu31i_BFu8s_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu8s_BFu32i");
    static STRUCT_IF_C BFu31i_BFu8s_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu8s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu8s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_BFu32i, BFu31i_BFu8s_BFu32i)
//============================================================================


struct  BFu31i_BFu8s_BFu32ll  {
  unsigned int v1:31;
  unsigned short v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_BFu8s_BFu32ll) C1{ Fi:31 Fs:8 FL:32}



static void Test_BFu31i_BFu8s_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu8s_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu8s_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu8s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, 1, "BFu31i_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, hide_ull(1LL<<31), "BFu31i_BFu8s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_BFu32ll, BFu31i_BFu8s_BFu32ll)
//============================================================================


struct  BFu31i_BFu8s_BFu33  {
  unsigned int v1:31;
  unsigned short v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_BFu8s_BFu33) C1{ Fi:31 Fs:8 FL:33}



static void Test_BFu31i_BFu8s_BFu33()
{
  {
    init_simple_test("BFu31i_BFu8s_BFu33");
    static STRUCT_IF_C BFu31i_BFu8s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu8s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, 1, "BFu31i_BFu8s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, hide_ull(1LL<<32), "BFu31i_BFu8s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_BFu33, BFu31i_BFu8s_BFu33)
//============================================================================


struct  BFu31i_BFu8s_BFu7c  {
  unsigned int v1:31;
  unsigned short v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu31i_BFu8s_BFu7c) C1{ Fi:31 Fs:8 Fc:7}



static void Test_BFu31i_BFu8s_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu8s_BFu7c");
    static STRUCT_IF_C BFu31i_BFu8s_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu8s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_BFu7c, BFu31i_BFu8s_BFu7c)
//============================================================================


struct  BFu31i_BFu8s_BFu7i  {
  unsigned int v1:31;
  unsigned short v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu31i_BFu8s_BFu7i) C1{ Fi:31 Fs:8 Fi:7}



static void Test_BFu31i_BFu8s_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu8s_BFu7i");
    static STRUCT_IF_C BFu31i_BFu8s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu8s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_BFu7i, BFu31i_BFu8s_BFu7i)
//============================================================================


struct  BFu31i_BFu8s_BFu7ll  {
  unsigned int v1:31;
  unsigned short v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_BFu8s_BFu7ll) C1{ Fi:31 Fs:8 FL:7}



static void Test_BFu31i_BFu8s_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu8s_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu8s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu8s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_BFu7ll, BFu31i_BFu8s_BFu7ll)
//============================================================================


struct  BFu31i_BFu8s_BFu7s  {
  unsigned int v1:31;
  unsigned short v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu31i_BFu8s_BFu7s) C1{ Fi:31 Fs:8 Fs:7}



static void Test_BFu31i_BFu8s_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu8s_BFu7s");
    static STRUCT_IF_C BFu31i_BFu8s_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu8s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_BFu7s, BFu31i_BFu8s_BFu7s)
//============================================================================


struct  BFu31i_BFu8s_BFu8c  {
  unsigned int v1:31;
  unsigned short v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu31i_BFu8s_BFu8c) C1{ Fi:31 Fs:8 Fc:8}



static void Test_BFu31i_BFu8s_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu8s_BFu8c");
    static STRUCT_IF_C BFu31i_BFu8s_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_BFu8c, BFu31i_BFu8s_BFu8c)
//============================================================================


struct  BFu31i_BFu8s_BFu8i  {
  unsigned int v1:31;
  unsigned short v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu31i_BFu8s_BFu8i) C1{ Fi:31 Fs:8 Fi:8}



static void Test_BFu31i_BFu8s_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu8s_BFu8i");
    static STRUCT_IF_C BFu31i_BFu8s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_BFu8i, BFu31i_BFu8s_BFu8i)
//============================================================================


struct  BFu31i_BFu8s_BFu8ll  {
  unsigned int v1:31;
  unsigned short v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_BFu8s_BFu8ll) C1{ Fi:31 Fs:8 FL:8}



static void Test_BFu31i_BFu8s_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu8s_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu8s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_BFu8ll, BFu31i_BFu8s_BFu8ll)
//============================================================================


struct  BFu31i_BFu8s_BFu8s  {
  unsigned int v1:31;
  unsigned short v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu31i_BFu8s_BFu8s) C1{ Fi:31 Fs:8 Fs:8}



static void Test_BFu31i_BFu8s_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu8s_BFu8s");
    static STRUCT_IF_C BFu31i_BFu8s_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_BFu8s, BFu31i_BFu8s_BFu8s)
//============================================================================


struct  BFu31i_BFu8s_BFu9i  {
  unsigned int v1:31;
  unsigned short v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu31i_BFu8s_BFu9i) C1{ Fi:31 Fs:8 Fi:9}



static void Test_BFu31i_BFu8s_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu8s_BFu9i");
    static STRUCT_IF_C BFu31i_BFu8s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu31i_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu8s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_BFu9i, BFu31i_BFu8s_BFu9i)
//============================================================================


struct  BFu31i_BFu8s_BFu9ll  {
  unsigned int v1:31;
  unsigned short v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_BFu8s_BFu9ll) C1{ Fi:31 Fs:8 FL:9}



static void Test_BFu31i_BFu8s_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu8s_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu8s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu31i_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu8s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_BFu9ll, BFu31i_BFu8s_BFu9ll)
//============================================================================


struct  BFu31i_BFu8s_BFu9s  {
  unsigned int v1:31;
  unsigned short v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu31i_BFu8s_BFu9s) C1{ Fi:31 Fs:8 Fs:9}



static void Test_BFu31i_BFu8s_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu8s_BFu9s");
    static STRUCT_IF_C BFu31i_BFu8s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31i_BFu8s_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu8s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_BFu9s, BFu31i_BFu8s_BFu9s)
//============================================================================


struct  BFu31i_BFu8s_C  {
  unsigned int v1:31;
  unsigned short v2:8;
  char v3;
};
//SIG(1 BFu31i_BFu8s_C) C1{ Fi:31 Fs:8 Fc}



static void Test_BFu31i_BFu8s_C()
{
  {
    init_simple_test("BFu31i_BFu8s_C");
    static STRUCT_IF_C BFu31i_BFu8s_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8s_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_C");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_C");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_C");
    check_field_offset(lv, v3, 5, "BFu31i_BFu8s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_C, BFu31i_BFu8s_C)
//============================================================================


struct  BFu31i_BFu8s_D  {
  unsigned int v1:31;
  unsigned short v2:8;
  double v3;
};
//SIG(1 BFu31i_BFu8s_D) C1{ Fi:31 Fs:8 FL}



static void Test_BFu31i_BFu8s_D()
{
  {
    init_simple_test("BFu31i_BFu8s_D");
    static STRUCT_IF_C BFu31i_BFu8s_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu8s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8s_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_D");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_D");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_D");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_D, BFu31i_BFu8s_D)
//============================================================================


struct  BFu31i_BFu8s_F  {
  unsigned int v1:31;
  unsigned short v2:8;
  float v3;
};
//SIG(1 BFu31i_BFu8s_F) C1{ Fi:31 Fs:8 Fi}



static void Test_BFu31i_BFu8s_F()
{
  {
    init_simple_test("BFu31i_BFu8s_F");
    static STRUCT_IF_C BFu31i_BFu8s_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu8s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8s_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_F");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_F");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_F");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_F, BFu31i_BFu8s_F)
//============================================================================


struct  BFu31i_BFu8s_I  {
  unsigned int v1:31;
  unsigned short v2:8;
  int v3;
};
//SIG(1 BFu31i_BFu8s_I) C1{ Fi:31 Fs:8 Fi}



static void Test_BFu31i_BFu8s_I()
{
  {
    init_simple_test("BFu31i_BFu8s_I");
    static STRUCT_IF_C BFu31i_BFu8s_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu8s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8s_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_I");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_I");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_I");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_I, BFu31i_BFu8s_I)
//============================================================================


struct  BFu31i_BFu8s_Ip  {
  unsigned int v1:31;
  unsigned short v2:8;
  int *v3;
};
//SIG(1 BFu31i_BFu8s_Ip) C1{ Fi:31 Fs:8 Fp}



static void Test_BFu31i_BFu8s_Ip()
{
  {
    init_simple_test("BFu31i_BFu8s_Ip");
    static STRUCT_IF_C BFu31i_BFu8s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu8s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_Ip");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_Ip");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_Ip");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_Ip, BFu31i_BFu8s_Ip)
//============================================================================


struct  BFu31i_BFu8s_L  {
  unsigned int v1:31;
  unsigned short v2:8;
  __tsi64 v3;
};
//SIG(1 BFu31i_BFu8s_L) C1{ Fi:31 Fs:8 FL}



static void Test_BFu31i_BFu8s_L()
{
  {
    init_simple_test("BFu31i_BFu8s_L");
    static STRUCT_IF_C BFu31i_BFu8s_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu8s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8s_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_L");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_L");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_L");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_L, BFu31i_BFu8s_L)
//============================================================================


struct  BFu31i_BFu8s_S  {
  unsigned int v1:31;
  unsigned short v2:8;
  short v3;
};
//SIG(1 BFu31i_BFu8s_S) C1{ Fi:31 Fs:8 Fs}



static void Test_BFu31i_BFu8s_S()
{
  {
    init_simple_test("BFu31i_BFu8s_S");
    static STRUCT_IF_C BFu31i_BFu8s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8s_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_S");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_S");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_S");
    check_field_offset(lv, v3, 6, "BFu31i_BFu8s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_S, BFu31i_BFu8s_S)
//============================================================================


struct  BFu31i_BFu8s_Uc  {
  unsigned int v1:31;
  unsigned short v2:8;
  unsigned char v3;
};
//SIG(1 BFu31i_BFu8s_Uc) C1{ Fi:31 Fs:8 Fc}



static void Test_BFu31i_BFu8s_Uc()
{
  {
    init_simple_test("BFu31i_BFu8s_Uc");
    static STRUCT_IF_C BFu31i_BFu8s_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_Uc");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_Uc");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_Uc");
    check_field_offset(lv, v3, 5, "BFu31i_BFu8s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_Uc, BFu31i_BFu8s_Uc)
//============================================================================


struct  BFu31i_BFu8s_Ui  {
  unsigned int v1:31;
  unsigned short v2:8;
  unsigned int v3;
};
//SIG(1 BFu31i_BFu8s_Ui) C1{ Fi:31 Fs:8 Fi}



static void Test_BFu31i_BFu8s_Ui()
{
  {
    init_simple_test("BFu31i_BFu8s_Ui");
    static STRUCT_IF_C BFu31i_BFu8s_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu8s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_Ui");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_Ui");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_Ui");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_Ui, BFu31i_BFu8s_Ui)
//============================================================================


struct  BFu31i_BFu8s_Ul  {
  unsigned int v1:31;
  unsigned short v2:8;
  __tsu64 v3;
};
//SIG(1 BFu31i_BFu8s_Ul) C1{ Fi:31 Fs:8 FL}



static void Test_BFu31i_BFu8s_Ul()
{
  {
    init_simple_test("BFu31i_BFu8s_Ul");
    static STRUCT_IF_C BFu31i_BFu8s_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu8s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_Ul");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_Ul");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_Ul");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_Ul, BFu31i_BFu8s_Ul)
//============================================================================


struct  BFu31i_BFu8s_Us  {
  unsigned int v1:31;
  unsigned short v2:8;
  unsigned short v3;
};
//SIG(1 BFu31i_BFu8s_Us) C1{ Fi:31 Fs:8 Fs}



static void Test_BFu31i_BFu8s_Us()
{
  {
    init_simple_test("BFu31i_BFu8s_Us");
    static STRUCT_IF_C BFu31i_BFu8s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_Us");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_Us");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_Us");
    check_field_offset(lv, v3, 6, "BFu31i_BFu8s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_Us, BFu31i_BFu8s_Us)
//============================================================================


struct  BFu31i_BFu8s_Vp  {
  unsigned int v1:31;
  unsigned short v2:8;
  void *v3;
};
//SIG(1 BFu31i_BFu8s_Vp) C1{ Fi:31 Fs:8 Fp}



static void Test_BFu31i_BFu8s_Vp()
{
  {
    init_simple_test("BFu31i_BFu8s_Vp");
    static STRUCT_IF_C BFu31i_BFu8s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu8s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_Vp");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_Vp");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_Vp");
    check_field_offset(lv, v3, 8, "BFu31i_BFu8s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu8s_Vp, BFu31i_BFu8s_Vp)
//============================================================================


struct  BFu31i_BFu9i  {
  unsigned int v1:31;
  unsigned int v2:9;
};
//SIG(1 BFu31i_BFu9i) C1{ Fi:31 Fi:9}



static void Test_BFu31i_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu9i");
    static STRUCT_IF_C BFu31i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i, BFu31i_BFu9i)
//============================================================================


struct  BFu31i_BFu9i_BFu15i  {
  unsigned int v1:31;
  unsigned int v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu31i_BFu9i_BFu15i) C1{ Fi:31 Fi:9 Fi:15}



static void Test_BFu31i_BFu9i_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu9i_BFu15i");
    static STRUCT_IF_C BFu31i_BFu9i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, 5, 1, 15, 1, "BFu31i_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, 5, 1, 15, hide_ull(1LL<<14), "BFu31i_BFu9i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_BFu15i, BFu31i_BFu9i_BFu15i)
//============================================================================


struct  BFu31i_BFu9i_BFu15ll  {
  unsigned int v1:31;
  unsigned int v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_BFu9i_BFu15ll) C1{ Fi:31 Fi:9 FL:15}



static void Test_BFu31i_BFu9i_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu9i_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu9i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, 5, 1, 15, 1, "BFu31i_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, 5, 1, 15, hide_ull(1LL<<14), "BFu31i_BFu9i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_BFu15ll, BFu31i_BFu9i_BFu15ll)
//============================================================================


struct  BFu31i_BFu9i_BFu15s  {
  unsigned int v1:31;
  unsigned int v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu31i_BFu9i_BFu15s) C1{ Fi:31 Fi:9 Fs:15}



static void Test_BFu31i_BFu9i_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu9i_BFu15s");
    static STRUCT_IF_C BFu31i_BFu9i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu9i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_BFu15s, BFu31i_BFu9i_BFu15s)
//============================================================================


struct  BFu31i_BFu9i_BFu16i  {
  unsigned int v1:31;
  unsigned int v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu31i_BFu9i_BFu16i) C1{ Fi:31 Fi:9 Fi:16}



static void Test_BFu31i_BFu9i_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu9i_BFu16i");
    static STRUCT_IF_C BFu31i_BFu9i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, 5, 1, 16, 1, "BFu31i_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, 5, 1, 16, hide_ull(1LL<<15), "BFu31i_BFu9i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_BFu16i, BFu31i_BFu9i_BFu16i)
//============================================================================


struct  BFu31i_BFu9i_BFu16ll  {
  unsigned int v1:31;
  unsigned int v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_BFu9i_BFu16ll) C1{ Fi:31 Fi:9 FL:16}



static void Test_BFu31i_BFu9i_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu9i_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu9i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, 5, 1, 16, 1, "BFu31i_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, 5, 1, 16, hide_ull(1LL<<15), "BFu31i_BFu9i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_BFu16ll, BFu31i_BFu9i_BFu16ll)
//============================================================================


struct  BFu31i_BFu9i_BFu16s  {
  unsigned int v1:31;
  unsigned int v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu31i_BFu9i_BFu16s) C1{ Fi:31 Fi:9 Fs:16}



static void Test_BFu31i_BFu9i_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu9i_BFu16s");
    static STRUCT_IF_C BFu31i_BFu9i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu9i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_BFu16s, BFu31i_BFu9i_BFu16s)
//============================================================================


struct  BFu31i_BFu9i_BFu17i  {
  unsigned int v1:31;
  unsigned int v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu31i_BFu9i_BFu17i) C1{ Fi:31 Fi:9 Fi:17}



static void Test_BFu31i_BFu9i_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu9i_BFu17i");
    static STRUCT_IF_C BFu31i_BFu9i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, 5, 1, 17, 1, "BFu31i_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, 5, 1, 17, hide_ull(1LL<<16), "BFu31i_BFu9i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_BFu17i, BFu31i_BFu9i_BFu17i)
//============================================================================


struct  BFu31i_BFu9i_BFu17ll  {
  unsigned int v1:31;
  unsigned int v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_BFu9i_BFu17ll) C1{ Fi:31 Fi:9 FL:17}



static void Test_BFu31i_BFu9i_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu9i_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu9i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, 5, 1, 17, 1, "BFu31i_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, 5, 1, 17, hide_ull(1LL<<16), "BFu31i_BFu9i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_BFu17ll, BFu31i_BFu9i_BFu17ll)
//============================================================================


struct  BFu31i_BFu9i_BFu1c  {
  unsigned int v1:31;
  unsigned int v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu31i_BFu9i_BFu1c) C1{ Fi:31 Fi:9 Fc:1}



static void Test_BFu31i_BFu9i_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu9i_BFu1c");
    static STRUCT_IF_C BFu31i_BFu9i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu1c");
    set_bf_and_test(lv, v3, 5, 1, 1, 1, "BFu31i_BFu9i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_BFu1c, BFu31i_BFu9i_BFu1c)
//============================================================================


struct  BFu31i_BFu9i_BFu1i  {
  unsigned int v1:31;
  unsigned int v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu31i_BFu9i_BFu1i) C1{ Fi:31 Fi:9 Fi:1}



static void Test_BFu31i_BFu9i_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu9i_BFu1i");
    static STRUCT_IF_C BFu31i_BFu9i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu1i");
    set_bf_and_test(lv, v3, 5, 1, 1, 1, "BFu31i_BFu9i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_BFu1i, BFu31i_BFu9i_BFu1i)
//============================================================================


struct  BFu31i_BFu9i_BFu1ll  {
  unsigned int v1:31;
  unsigned int v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_BFu9i_BFu1ll) C1{ Fi:31 Fi:9 FL:1}



static void Test_BFu31i_BFu9i_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu9i_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu9i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu1ll");
    set_bf_and_test(lv, v3, 5, 1, 1, 1, "BFu31i_BFu9i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_BFu1ll, BFu31i_BFu9i_BFu1ll)
//============================================================================


struct  BFu31i_BFu9i_BFu1s  {
  unsigned int v1:31;
  unsigned int v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu31i_BFu9i_BFu1s) C1{ Fi:31 Fi:9 Fs:1}



static void Test_BFu31i_BFu9i_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu9i_BFu1s");
    static STRUCT_IF_C BFu31i_BFu9i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu1s");
    set_bf_and_test(lv, v3, 5, 1, 1, 1, "BFu31i_BFu9i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_BFu1s, BFu31i_BFu9i_BFu1s)
//============================================================================


struct  BFu31i_BFu9i_BFu31i  {
  unsigned int v1:31;
  unsigned int v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFu9i_BFu31i) C1{ Fi:31 Fi:9 Fi:31}



static void Test_BFu31i_BFu9i_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu9i_BFu31i");
    static STRUCT_IF_C BFu31i_BFu9i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu9i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu9i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_BFu31i, BFu31i_BFu9i_BFu31i)
//============================================================================


struct  BFu31i_BFu9i_BFu31ll  {
  unsigned int v1:31;
  unsigned int v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFu9i_BFu31ll) C1{ Fi:31 Fi:9 FL:31}



static void Test_BFu31i_BFu9i_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu9i_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu9i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu9i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 31, 1, "BFu31i_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_BFu31ll, BFu31i_BFu9i_BFu31ll)
//============================================================================


struct  BFu31i_BFu9i_BFu32i  {
  unsigned int v1:31;
  unsigned int v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu31i_BFu9i_BFu32i) C1{ Fi:31 Fi:9 Fi:32}



static void Test_BFu31i_BFu9i_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu9i_BFu32i");
    static STRUCT_IF_C BFu31i_BFu9i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu9i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_BFu9i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu9i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_BFu32i, BFu31i_BFu9i_BFu32i)
//============================================================================


struct  BFu31i_BFu9i_BFu32ll  {
  unsigned int v1:31;
  unsigned int v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_BFu9i_BFu32ll) C1{ Fi:31 Fi:9 FL:32}



static void Test_BFu31i_BFu9i_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu9i_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu9i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu9i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 32, 1, "BFu31i_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 32, hide_ull(1LL<<31), "BFu31i_BFu9i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_BFu32ll, BFu31i_BFu9i_BFu32ll)
//============================================================================


struct  BFu31i_BFu9i_BFu33  {
  unsigned int v1:31;
  unsigned int v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_BFu9i_BFu33) C1{ Fi:31 Fi:9 FL:33}



static void Test_BFu31i_BFu9i_BFu33()
{
  {
    init_simple_test("BFu31i_BFu9i_BFu33");
    static STRUCT_IF_C BFu31i_BFu9i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu9i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 33, 1, "BFu31i_BFu9i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 33, hide_ull(1LL<<32), "BFu31i_BFu9i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_BFu33, BFu31i_BFu9i_BFu33)
//============================================================================


struct  BFu31i_BFu9i_BFu7c  {
  unsigned int v1:31;
  unsigned int v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu31i_BFu9i_BFu7c) C1{ Fi:31 Fi:9 Fc:7}



static void Test_BFu31i_BFu9i_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu9i_BFu7c");
    static STRUCT_IF_C BFu31i_BFu9i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, 5, 1, 7, 1, "BFu31i_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, 5, 1, 7, hide_ull(1LL<<6), "BFu31i_BFu9i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_BFu7c, BFu31i_BFu9i_BFu7c)
//============================================================================


struct  BFu31i_BFu9i_BFu7i  {
  unsigned int v1:31;
  unsigned int v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu31i_BFu9i_BFu7i) C1{ Fi:31 Fi:9 Fi:7}



static void Test_BFu31i_BFu9i_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu9i_BFu7i");
    static STRUCT_IF_C BFu31i_BFu9i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, 5, 1, 7, 1, "BFu31i_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, 5, 1, 7, hide_ull(1LL<<6), "BFu31i_BFu9i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_BFu7i, BFu31i_BFu9i_BFu7i)
//============================================================================


struct  BFu31i_BFu9i_BFu7ll  {
  unsigned int v1:31;
  unsigned int v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_BFu9i_BFu7ll) C1{ Fi:31 Fi:9 FL:7}



static void Test_BFu31i_BFu9i_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu9i_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu9i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, 5, 1, 7, 1, "BFu31i_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, 5, 1, 7, hide_ull(1LL<<6), "BFu31i_BFu9i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_BFu7ll, BFu31i_BFu9i_BFu7ll)
//============================================================================


struct  BFu31i_BFu9i_BFu7s  {
  unsigned int v1:31;
  unsigned int v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu31i_BFu9i_BFu7s) C1{ Fi:31 Fi:9 Fs:7}



static void Test_BFu31i_BFu9i_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu9i_BFu7s");
    static STRUCT_IF_C BFu31i_BFu9i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, 5, 1, 7, 1, "BFu31i_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, 5, 1, 7, hide_ull(1LL<<6), "BFu31i_BFu9i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_BFu7s, BFu31i_BFu9i_BFu7s)
//============================================================================


struct  BFu31i_BFu9i_BFu8c  {
  unsigned int v1:31;
  unsigned int v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu31i_BFu9i_BFu8c) C1{ Fi:31 Fi:9 Fc:8}



static void Test_BFu31i_BFu9i_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu9i_BFu8c");
    static STRUCT_IF_C BFu31i_BFu9i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu9i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_BFu8c, BFu31i_BFu9i_BFu8c)
//============================================================================


struct  BFu31i_BFu9i_BFu8i  {
  unsigned int v1:31;
  unsigned int v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu31i_BFu9i_BFu8i) C1{ Fi:31 Fi:9 Fi:8}



static void Test_BFu31i_BFu9i_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu9i_BFu8i");
    static STRUCT_IF_C BFu31i_BFu9i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, 5, 1, 8, 1, "BFu31i_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, 5, 1, 8, hide_ull(1LL<<7), "BFu31i_BFu9i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_BFu8i, BFu31i_BFu9i_BFu8i)
//============================================================================


struct  BFu31i_BFu9i_BFu8ll  {
  unsigned int v1:31;
  unsigned int v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_BFu9i_BFu8ll) C1{ Fi:31 Fi:9 FL:8}



static void Test_BFu31i_BFu9i_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu9i_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu9i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, 5, 1, 8, 1, "BFu31i_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, 5, 1, 8, hide_ull(1LL<<7), "BFu31i_BFu9i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_BFu8ll, BFu31i_BFu9i_BFu8ll)
//============================================================================


struct  BFu31i_BFu9i_BFu8s  {
  unsigned int v1:31;
  unsigned int v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu31i_BFu9i_BFu8s) C1{ Fi:31 Fi:9 Fs:8}



static void Test_BFu31i_BFu9i_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu9i_BFu8s");
    static STRUCT_IF_C BFu31i_BFu9i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu9i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_BFu8s, BFu31i_BFu9i_BFu8s)
//============================================================================


struct  BFu31i_BFu9i_BFu9i  {
  unsigned int v1:31;
  unsigned int v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu31i_BFu9i_BFu9i) C1{ Fi:31 Fi:9 Fi:9}



static void Test_BFu31i_BFu9i_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu9i_BFu9i");
    static STRUCT_IF_C BFu31i_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 5, 1, 9, 1, "BFu31i_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 5, 1, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_BFu9i, BFu31i_BFu9i_BFu9i)
//============================================================================


struct  BFu31i_BFu9i_BFu9ll  {
  unsigned int v1:31;
  unsigned int v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_BFu9i_BFu9ll) C1{ Fi:31 Fi:9 FL:9}



static void Test_BFu31i_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu9i_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 5, 1, 9, 1, "BFu31i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 5, 1, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_BFu9ll, BFu31i_BFu9i_BFu9ll)
//============================================================================


struct  BFu31i_BFu9i_BFu9s  {
  unsigned int v1:31;
  unsigned int v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu31i_BFu9i_BFu9s) C1{ Fi:31 Fi:9 Fs:9}



static void Test_BFu31i_BFu9i_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu9i_BFu9s");
    static STRUCT_IF_C BFu31i_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31i_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_BFu9s, BFu31i_BFu9i_BFu9s)
//============================================================================


struct  BFu31i_BFu9i_C  {
  unsigned int v1:31;
  unsigned int v2:9;
  char v3;
};
//SIG(1 BFu31i_BFu9i_C) C1{ Fi:31 Fi:9 Fc}



static void Test_BFu31i_BFu9i_C()
{
  {
    init_simple_test("BFu31i_BFu9i_C");
    static STRUCT_IF_C BFu31i_BFu9i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9i_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_C");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_C");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_C");
    check_field_offset(lv, v3, 6, "BFu31i_BFu9i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_C, BFu31i_BFu9i_C)
//============================================================================


struct  BFu31i_BFu9i_D  {
  unsigned int v1:31;
  unsigned int v2:9;
  double v3;
};
//SIG(1 BFu31i_BFu9i_D) C1{ Fi:31 Fi:9 FL}



static void Test_BFu31i_BFu9i_D()
{
  {
    init_simple_test("BFu31i_BFu9i_D");
    static STRUCT_IF_C BFu31i_BFu9i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu9i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9i_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_D");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_D");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_D");
    check_field_offset(lv, v3, 8, "BFu31i_BFu9i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_D, BFu31i_BFu9i_D)
//============================================================================


struct  BFu31i_BFu9i_F  {
  unsigned int v1:31;
  unsigned int v2:9;
  float v3;
};
//SIG(1 BFu31i_BFu9i_F) C1{ Fi:31 Fi:9 Fi}



static void Test_BFu31i_BFu9i_F()
{
  {
    init_simple_test("BFu31i_BFu9i_F");
    static STRUCT_IF_C BFu31i_BFu9i_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu9i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9i_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_F");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_F");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_F");
    check_field_offset(lv, v3, 8, "BFu31i_BFu9i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_F, BFu31i_BFu9i_F)
//============================================================================


struct  BFu31i_BFu9i_I  {
  unsigned int v1:31;
  unsigned int v2:9;
  int v3;
};
//SIG(1 BFu31i_BFu9i_I) C1{ Fi:31 Fi:9 Fi}



static void Test_BFu31i_BFu9i_I()
{
  {
    init_simple_test("BFu31i_BFu9i_I");
    static STRUCT_IF_C BFu31i_BFu9i_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu9i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9i_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_I");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_I");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_I");
    check_field_offset(lv, v3, 8, "BFu31i_BFu9i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_I, BFu31i_BFu9i_I)
//============================================================================


struct  BFu31i_BFu9i_Ip  {
  unsigned int v1:31;
  unsigned int v2:9;
  int *v3;
};
//SIG(1 BFu31i_BFu9i_Ip) C1{ Fi:31 Fi:9 Fp}



static void Test_BFu31i_BFu9i_Ip()
{
  {
    init_simple_test("BFu31i_BFu9i_Ip");
    static STRUCT_IF_C BFu31i_BFu9i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu9i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_Ip");
    check_field_offset(lv, v3, 8, "BFu31i_BFu9i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_Ip, BFu31i_BFu9i_Ip)
//============================================================================


struct  BFu31i_BFu9i_L  {
  unsigned int v1:31;
  unsigned int v2:9;
  __tsi64 v3;
};
//SIG(1 BFu31i_BFu9i_L) C1{ Fi:31 Fi:9 FL}



static void Test_BFu31i_BFu9i_L()
{
  {
    init_simple_test("BFu31i_BFu9i_L");
    static STRUCT_IF_C BFu31i_BFu9i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu9i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9i_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_L");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_L");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_L");
    check_field_offset(lv, v3, 8, "BFu31i_BFu9i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_L, BFu31i_BFu9i_L)
//============================================================================


struct  BFu31i_BFu9i_S  {
  unsigned int v1:31;
  unsigned int v2:9;
  short v3;
};
//SIG(1 BFu31i_BFu9i_S) C1{ Fi:31 Fi:9 Fs}



static void Test_BFu31i_BFu9i_S()
{
  {
    init_simple_test("BFu31i_BFu9i_S");
    static STRUCT_IF_C BFu31i_BFu9i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9i_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_S");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_S");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_S");
    check_field_offset(lv, v3, 6, "BFu31i_BFu9i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_S, BFu31i_BFu9i_S)
//============================================================================


struct  BFu31i_BFu9i_Uc  {
  unsigned int v1:31;
  unsigned int v2:9;
  unsigned char v3;
};
//SIG(1 BFu31i_BFu9i_Uc) C1{ Fi:31 Fi:9 Fc}



static void Test_BFu31i_BFu9i_Uc()
{
  {
    init_simple_test("BFu31i_BFu9i_Uc");
    static STRUCT_IF_C BFu31i_BFu9i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_Uc");
    check_field_offset(lv, v3, 6, "BFu31i_BFu9i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_Uc, BFu31i_BFu9i_Uc)
//============================================================================


struct  BFu31i_BFu9i_Ui  {
  unsigned int v1:31;
  unsigned int v2:9;
  unsigned int v3;
};
//SIG(1 BFu31i_BFu9i_Ui) C1{ Fi:31 Fi:9 Fi}



static void Test_BFu31i_BFu9i_Ui()
{
  {
    init_simple_test("BFu31i_BFu9i_Ui");
    static STRUCT_IF_C BFu31i_BFu9i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu9i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_Ui");
    check_field_offset(lv, v3, 8, "BFu31i_BFu9i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_Ui, BFu31i_BFu9i_Ui)
//============================================================================


struct  BFu31i_BFu9i_Ul  {
  unsigned int v1:31;
  unsigned int v2:9;
  __tsu64 v3;
};
//SIG(1 BFu31i_BFu9i_Ul) C1{ Fi:31 Fi:9 FL}



static void Test_BFu31i_BFu9i_Ul()
{
  {
    init_simple_test("BFu31i_BFu9i_Ul");
    static STRUCT_IF_C BFu31i_BFu9i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu9i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_Ul");
    check_field_offset(lv, v3, 8, "BFu31i_BFu9i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_Ul, BFu31i_BFu9i_Ul)
//============================================================================


struct  BFu31i_BFu9i_Us  {
  unsigned int v1:31;
  unsigned int v2:9;
  unsigned short v3;
};
//SIG(1 BFu31i_BFu9i_Us) C1{ Fi:31 Fi:9 Fs}



static void Test_BFu31i_BFu9i_Us()
{
  {
    init_simple_test("BFu31i_BFu9i_Us");
    static STRUCT_IF_C BFu31i_BFu9i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_Us");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_Us");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_Us");
    check_field_offset(lv, v3, 6, "BFu31i_BFu9i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_Us, BFu31i_BFu9i_Us)
//============================================================================


struct  BFu31i_BFu9i_Vp  {
  unsigned int v1:31;
  unsigned int v2:9;
  void *v3;
};
//SIG(1 BFu31i_BFu9i_Vp) C1{ Fi:31 Fi:9 Fp}



static void Test_BFu31i_BFu9i_Vp()
{
  {
    init_simple_test("BFu31i_BFu9i_Vp");
    static STRUCT_IF_C BFu31i_BFu9i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu9i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_Vp");
    check_field_offset(lv, v3, 8, "BFu31i_BFu9i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9i_Vp, BFu31i_BFu9i_Vp)
//============================================================================


struct  BFu31i_BFu9ll  {
  unsigned int v1:31;
  __tsu64 v2:9;
};
//SIG(1 BFu31i_BFu9ll) C1{ Fi:31 FL:9}



static void Test_BFu31i_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll, BFu31i_BFu9ll)
//============================================================================


struct  BFu31i_BFu9ll_BFu15i  {
  unsigned int v1:31;
  __tsu64 v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu31i_BFu9ll_BFu15i) C1{ Fi:31 FL:9 Fi:15}



static void Test_BFu31i_BFu9ll_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu9ll_BFu15i");
    static STRUCT_IF_C BFu31i_BFu9ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu31i_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu9ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_BFu15i, BFu31i_BFu9ll_BFu15i)
//============================================================================


struct  BFu31i_BFu9ll_BFu15ll  {
  unsigned int v1:31;
  __tsu64 v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_BFu9ll_BFu15ll) C1{ Fi:31 FL:9 FL:15}



static void Test_BFu31i_BFu9ll_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu9ll_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu9ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu31i_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu9ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_BFu15ll, BFu31i_BFu9ll_BFu15ll)
//============================================================================


struct  BFu31i_BFu9ll_BFu15s  {
  unsigned int v1:31;
  __tsu64 v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu31i_BFu9ll_BFu15s) C1{ Fi:31 FL:9 Fs:15}



static void Test_BFu31i_BFu9ll_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu9ll_BFu15s");
    static STRUCT_IF_C BFu31i_BFu9ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu9ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_BFu15s, BFu31i_BFu9ll_BFu15s)
//============================================================================


struct  BFu31i_BFu9ll_BFu16i  {
  unsigned int v1:31;
  __tsu64 v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu31i_BFu9ll_BFu16i) C1{ Fi:31 FL:9 Fi:16}



static void Test_BFu31i_BFu9ll_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu9ll_BFu16i");
    static STRUCT_IF_C BFu31i_BFu9ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu31i_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu9ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_BFu16i, BFu31i_BFu9ll_BFu16i)
//============================================================================


struct  BFu31i_BFu9ll_BFu16ll  {
  unsigned int v1:31;
  __tsu64 v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_BFu9ll_BFu16ll) C1{ Fi:31 FL:9 FL:16}



static void Test_BFu31i_BFu9ll_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu9ll_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu9ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu31i_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu9ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_BFu16ll, BFu31i_BFu9ll_BFu16ll)
//============================================================================


struct  BFu31i_BFu9ll_BFu16s  {
  unsigned int v1:31;
  __tsu64 v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu31i_BFu9ll_BFu16s) C1{ Fi:31 FL:9 Fs:16}



static void Test_BFu31i_BFu9ll_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu9ll_BFu16s");
    static STRUCT_IF_C BFu31i_BFu9ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu9ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_BFu16s, BFu31i_BFu9ll_BFu16s)
//============================================================================


struct  BFu31i_BFu9ll_BFu17i  {
  unsigned int v1:31;
  __tsu64 v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu31i_BFu9ll_BFu17i) C1{ Fi:31 FL:9 Fi:17}



static void Test_BFu31i_BFu9ll_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu9ll_BFu17i");
    static STRUCT_IF_C BFu31i_BFu9ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu31i_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu9ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_BFu17i, BFu31i_BFu9ll_BFu17i)
//============================================================================


struct  BFu31i_BFu9ll_BFu17ll  {
  unsigned int v1:31;
  __tsu64 v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_BFu9ll_BFu17ll) C1{ Fi:31 FL:9 FL:17}



static void Test_BFu31i_BFu9ll_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu9ll_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu9ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu31i_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu9ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_BFu17ll, BFu31i_BFu9ll_BFu17ll)
//============================================================================


struct  BFu31i_BFu9ll_BFu1c  {
  unsigned int v1:31;
  __tsu64 v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu31i_BFu9ll_BFu1c) C1{ Fi:31 FL:9 Fc:1}



static void Test_BFu31i_BFu9ll_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu9ll_BFu1c");
    static STRUCT_IF_C BFu31i_BFu9ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu1c");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31i_BFu9ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_BFu1c, BFu31i_BFu9ll_BFu1c)
//============================================================================


struct  BFu31i_BFu9ll_BFu1i  {
  unsigned int v1:31;
  __tsu64 v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu31i_BFu9ll_BFu1i) C1{ Fi:31 FL:9 Fi:1}



static void Test_BFu31i_BFu9ll_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu9ll_BFu1i");
    static STRUCT_IF_C BFu31i_BFu9ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu1i");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31i_BFu9ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_BFu1i, BFu31i_BFu9ll_BFu1i)
//============================================================================


struct  BFu31i_BFu9ll_BFu1ll  {
  unsigned int v1:31;
  __tsu64 v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_BFu9ll_BFu1ll) C1{ Fi:31 FL:9 FL:1}



static void Test_BFu31i_BFu9ll_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu9ll_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu9ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31i_BFu9ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_BFu1ll, BFu31i_BFu9ll_BFu1ll)
//============================================================================


struct  BFu31i_BFu9ll_BFu1s  {
  unsigned int v1:31;
  __tsu64 v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu31i_BFu9ll_BFu1s) C1{ Fi:31 FL:9 Fs:1}



static void Test_BFu31i_BFu9ll_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu9ll_BFu1s");
    static STRUCT_IF_C BFu31i_BFu9ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu1s");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31i_BFu9ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_BFu1s, BFu31i_BFu9ll_BFu1s)
//============================================================================


struct  BFu31i_BFu9ll_BFu31i  {
  unsigned int v1:31;
  __tsu64 v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFu9ll_BFu31i) C1{ Fi:31 FL:9 Fi:31}



static void Test_BFu31i_BFu9ll_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu9ll_BFu31i");
    static STRUCT_IF_C BFu31i_BFu9ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu9ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu9ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_BFu31i, BFu31i_BFu9ll_BFu31i)
//============================================================================


struct  BFu31i_BFu9ll_BFu31ll  {
  unsigned int v1:31;
  __tsu64 v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFu9ll_BFu31ll) C1{ Fi:31 FL:9 FL:31}



static void Test_BFu31i_BFu9ll_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu9ll_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu9ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu9ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, 1, "BFu31i_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_BFu31ll, BFu31i_BFu9ll_BFu31ll)
//============================================================================


struct  BFu31i_BFu9ll_BFu32i  {
  unsigned int v1:31;
  __tsu64 v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu31i_BFu9ll_BFu32i) C1{ Fi:31 FL:9 Fi:32}



static void Test_BFu31i_BFu9ll_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu9ll_BFu32i");
    static STRUCT_IF_C BFu31i_BFu9ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu9ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_BFu9ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu9ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_BFu32i, BFu31i_BFu9ll_BFu32i)
//============================================================================


struct  BFu31i_BFu9ll_BFu32ll  {
  unsigned int v1:31;
  __tsu64 v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_BFu9ll_BFu32ll) C1{ Fi:31 FL:9 FL:32}



static void Test_BFu31i_BFu9ll_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu9ll_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu9ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu9ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, 1, "BFu31i_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, hide_ull(1LL<<31), "BFu31i_BFu9ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_BFu32ll, BFu31i_BFu9ll_BFu32ll)
//============================================================================


struct  BFu31i_BFu9ll_BFu33  {
  unsigned int v1:31;
  __tsu64 v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_BFu9ll_BFu33) C1{ Fi:31 FL:9 FL:33}



static void Test_BFu31i_BFu9ll_BFu33()
{
  {
    init_simple_test("BFu31i_BFu9ll_BFu33");
    static STRUCT_IF_C BFu31i_BFu9ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu9ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, 1, "BFu31i_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, hide_ull(1LL<<32), "BFu31i_BFu9ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_BFu33, BFu31i_BFu9ll_BFu33)
//============================================================================


struct  BFu31i_BFu9ll_BFu7c  {
  unsigned int v1:31;
  __tsu64 v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu31i_BFu9ll_BFu7c) C1{ Fi:31 FL:9 Fc:7}



static void Test_BFu31i_BFu9ll_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu9ll_BFu7c");
    static STRUCT_IF_C BFu31i_BFu9ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu9ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_BFu7c, BFu31i_BFu9ll_BFu7c)
//============================================================================


struct  BFu31i_BFu9ll_BFu7i  {
  unsigned int v1:31;
  __tsu64 v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu31i_BFu9ll_BFu7i) C1{ Fi:31 FL:9 Fi:7}



static void Test_BFu31i_BFu9ll_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu9ll_BFu7i");
    static STRUCT_IF_C BFu31i_BFu9ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu9ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_BFu7i, BFu31i_BFu9ll_BFu7i)
//============================================================================


struct  BFu31i_BFu9ll_BFu7ll  {
  unsigned int v1:31;
  __tsu64 v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_BFu9ll_BFu7ll) C1{ Fi:31 FL:9 FL:7}



static void Test_BFu31i_BFu9ll_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu9ll_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu9ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu9ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_BFu7ll, BFu31i_BFu9ll_BFu7ll)
//============================================================================


struct  BFu31i_BFu9ll_BFu7s  {
  unsigned int v1:31;
  __tsu64 v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu31i_BFu9ll_BFu7s) C1{ Fi:31 FL:9 Fs:7}



static void Test_BFu31i_BFu9ll_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu9ll_BFu7s");
    static STRUCT_IF_C BFu31i_BFu9ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu9ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_BFu7s, BFu31i_BFu9ll_BFu7s)
//============================================================================


struct  BFu31i_BFu9ll_BFu8c  {
  unsigned int v1:31;
  __tsu64 v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu31i_BFu9ll_BFu8c) C1{ Fi:31 FL:9 Fc:8}



static void Test_BFu31i_BFu9ll_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu9ll_BFu8c");
    static STRUCT_IF_C BFu31i_BFu9ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu9ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_BFu8c, BFu31i_BFu9ll_BFu8c)
//============================================================================


struct  BFu31i_BFu9ll_BFu8i  {
  unsigned int v1:31;
  __tsu64 v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu31i_BFu9ll_BFu8i) C1{ Fi:31 FL:9 Fi:8}



static void Test_BFu31i_BFu9ll_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu9ll_BFu8i");
    static STRUCT_IF_C BFu31i_BFu9ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu9ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_BFu8i, BFu31i_BFu9ll_BFu8i)
//============================================================================


struct  BFu31i_BFu9ll_BFu8ll  {
  unsigned int v1:31;
  __tsu64 v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_BFu9ll_BFu8ll) C1{ Fi:31 FL:9 FL:8}



static void Test_BFu31i_BFu9ll_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu9ll_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu9ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu9ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_BFu8ll, BFu31i_BFu9ll_BFu8ll)
//============================================================================


struct  BFu31i_BFu9ll_BFu8s  {
  unsigned int v1:31;
  __tsu64 v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu31i_BFu9ll_BFu8s) C1{ Fi:31 FL:9 Fs:8}



static void Test_BFu31i_BFu9ll_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu9ll_BFu8s");
    static STRUCT_IF_C BFu31i_BFu9ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu9ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_BFu8s, BFu31i_BFu9ll_BFu8s)
//============================================================================


struct  BFu31i_BFu9ll_BFu9i  {
  unsigned int v1:31;
  __tsu64 v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu31i_BFu9ll_BFu9i) C1{ Fi:31 FL:9 Fi:9}



static void Test_BFu31i_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu9ll_BFu9i");
    static STRUCT_IF_C BFu31i_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu31i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_BFu9i, BFu31i_BFu9ll_BFu9i)
//============================================================================


struct  BFu31i_BFu9ll_BFu9ll  {
  unsigned int v1:31;
  __tsu64 v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_BFu9ll_BFu9ll) C1{ Fi:31 FL:9 FL:9}



static void Test_BFu31i_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu31i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_BFu9ll, BFu31i_BFu9ll_BFu9ll)
//============================================================================


struct  BFu31i_BFu9ll_BFu9s  {
  unsigned int v1:31;
  __tsu64 v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu31i_BFu9ll_BFu9s) C1{ Fi:31 FL:9 Fs:9}



static void Test_BFu31i_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu9ll_BFu9s");
    static STRUCT_IF_C BFu31i_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_BFu9s, BFu31i_BFu9ll_BFu9s)
//============================================================================


struct  BFu31i_BFu9ll_C  {
  unsigned int v1:31;
  __tsu64 v2:9;
  char v3;
};
//SIG(1 BFu31i_BFu9ll_C) C1{ Fi:31 FL:9 Fc}



static void Test_BFu31i_BFu9ll_C()
{
  {
    init_simple_test("BFu31i_BFu9ll_C");
    static STRUCT_IF_C BFu31i_BFu9ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_C");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_C");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_C");
    check_field_offset(lv, v3, 5, "BFu31i_BFu9ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_C, BFu31i_BFu9ll_C)
//============================================================================


struct  BFu31i_BFu9ll_D  {
  unsigned int v1:31;
  __tsu64 v2:9;
  double v3;
};
//SIG(1 BFu31i_BFu9ll_D) C1{ Fi:31 FL:9 FL}



static void Test_BFu31i_BFu9ll_D()
{
  {
    init_simple_test("BFu31i_BFu9ll_D");
    static STRUCT_IF_C BFu31i_BFu9ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu9ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_D");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_D");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_D");
    check_field_offset(lv, v3, 8, "BFu31i_BFu9ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_D, BFu31i_BFu9ll_D)
//============================================================================


struct  BFu31i_BFu9ll_F  {
  unsigned int v1:31;
  __tsu64 v2:9;
  float v3;
};
//SIG(1 BFu31i_BFu9ll_F) C1{ Fi:31 FL:9 Fi}



static void Test_BFu31i_BFu9ll_F()
{
  {
    init_simple_test("BFu31i_BFu9ll_F");
    static STRUCT_IF_C BFu31i_BFu9ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu9ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_F");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_F");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_F");
    check_field_offset(lv, v3, 8, "BFu31i_BFu9ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_F, BFu31i_BFu9ll_F)
//============================================================================


struct  BFu31i_BFu9ll_I  {
  unsigned int v1:31;
  __tsu64 v2:9;
  int v3;
};
//SIG(1 BFu31i_BFu9ll_I) C1{ Fi:31 FL:9 Fi}



static void Test_BFu31i_BFu9ll_I()
{
  {
    init_simple_test("BFu31i_BFu9ll_I");
    static STRUCT_IF_C BFu31i_BFu9ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu9ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_I");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_I");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_I");
    check_field_offset(lv, v3, 8, "BFu31i_BFu9ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_I, BFu31i_BFu9ll_I)
//============================================================================


struct  BFu31i_BFu9ll_Ip  {
  unsigned int v1:31;
  __tsu64 v2:9;
  int *v3;
};
//SIG(1 BFu31i_BFu9ll_Ip) C1{ Fi:31 FL:9 Fp}



static void Test_BFu31i_BFu9ll_Ip()
{
  {
    init_simple_test("BFu31i_BFu9ll_Ip");
    static STRUCT_IF_C BFu31i_BFu9ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu9ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_Ip");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_Ip");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_Ip");
    check_field_offset(lv, v3, 8, "BFu31i_BFu9ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_Ip, BFu31i_BFu9ll_Ip)
//============================================================================


struct  BFu31i_BFu9ll_L  {
  unsigned int v1:31;
  __tsu64 v2:9;
  __tsi64 v3;
};
//SIG(1 BFu31i_BFu9ll_L) C1{ Fi:31 FL:9 FL}



static void Test_BFu31i_BFu9ll_L()
{
  {
    init_simple_test("BFu31i_BFu9ll_L");
    static STRUCT_IF_C BFu31i_BFu9ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu9ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_L");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_L");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_L");
    check_field_offset(lv, v3, 8, "BFu31i_BFu9ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_L, BFu31i_BFu9ll_L)
//============================================================================


struct  BFu31i_BFu9ll_S  {
  unsigned int v1:31;
  __tsu64 v2:9;
  short v3;
};
//SIG(1 BFu31i_BFu9ll_S) C1{ Fi:31 FL:9 Fs}



static void Test_BFu31i_BFu9ll_S()
{
  {
    init_simple_test("BFu31i_BFu9ll_S");
    static STRUCT_IF_C BFu31i_BFu9ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_S");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_S");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_S");
    check_field_offset(lv, v3, 6, "BFu31i_BFu9ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_S, BFu31i_BFu9ll_S)
//============================================================================


struct  BFu31i_BFu9ll_Uc  {
  unsigned int v1:31;
  __tsu64 v2:9;
  unsigned char v3;
};
//SIG(1 BFu31i_BFu9ll_Uc) C1{ Fi:31 FL:9 Fc}



static void Test_BFu31i_BFu9ll_Uc()
{
  {
    init_simple_test("BFu31i_BFu9ll_Uc");
    static STRUCT_IF_C BFu31i_BFu9ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_Uc");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_Uc");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_Uc");
    check_field_offset(lv, v3, 5, "BFu31i_BFu9ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_Uc, BFu31i_BFu9ll_Uc)
//============================================================================


struct  BFu31i_BFu9ll_Ui  {
  unsigned int v1:31;
  __tsu64 v2:9;
  unsigned int v3;
};
//SIG(1 BFu31i_BFu9ll_Ui) C1{ Fi:31 FL:9 Fi}



static void Test_BFu31i_BFu9ll_Ui()
{
  {
    init_simple_test("BFu31i_BFu9ll_Ui");
    static STRUCT_IF_C BFu31i_BFu9ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu9ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_Ui");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_Ui");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_Ui");
    check_field_offset(lv, v3, 8, "BFu31i_BFu9ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_Ui, BFu31i_BFu9ll_Ui)
//============================================================================


struct  BFu31i_BFu9ll_Ul  {
  unsigned int v1:31;
  __tsu64 v2:9;
  __tsu64 v3;
};
//SIG(1 BFu31i_BFu9ll_Ul) C1{ Fi:31 FL:9 FL}



static void Test_BFu31i_BFu9ll_Ul()
{
  {
    init_simple_test("BFu31i_BFu9ll_Ul");
    static STRUCT_IF_C BFu31i_BFu9ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu9ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_Ul");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_Ul");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_Ul");
    check_field_offset(lv, v3, 8, "BFu31i_BFu9ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_Ul, BFu31i_BFu9ll_Ul)
//============================================================================


struct  BFu31i_BFu9ll_Us  {
  unsigned int v1:31;
  __tsu64 v2:9;
  unsigned short v3;
};
//SIG(1 BFu31i_BFu9ll_Us) C1{ Fi:31 FL:9 Fs}



static void Test_BFu31i_BFu9ll_Us()
{
  {
    init_simple_test("BFu31i_BFu9ll_Us");
    static STRUCT_IF_C BFu31i_BFu9ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_Us");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_Us");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_Us");
    check_field_offset(lv, v3, 6, "BFu31i_BFu9ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_Us, BFu31i_BFu9ll_Us)
//============================================================================


struct  BFu31i_BFu9ll_Vp  {
  unsigned int v1:31;
  __tsu64 v2:9;
  void *v3;
};
//SIG(1 BFu31i_BFu9ll_Vp) C1{ Fi:31 FL:9 Fp}



static void Test_BFu31i_BFu9ll_Vp()
{
  {
    init_simple_test("BFu31i_BFu9ll_Vp");
    static STRUCT_IF_C BFu31i_BFu9ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu9ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_Vp");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_Vp");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_Vp");
    check_field_offset(lv, v3, 8, "BFu31i_BFu9ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9ll_Vp, BFu31i_BFu9ll_Vp)
//============================================================================


struct  BFu31i_BFu9s  {
  unsigned int v1:31;
  unsigned short v2:9;
};
//SIG(1 BFu31i_BFu9s) C1{ Fi:31 Fs:9}



static void Test_BFu31i_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu9s");
    static STRUCT_IF_C BFu31i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s, BFu31i_BFu9s)
//============================================================================


struct  BFu31i_BFu9s_BFu15i  {
  unsigned int v1:31;
  unsigned short v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu31i_BFu9s_BFu15i) C1{ Fi:31 Fs:9 Fi:15}



static void Test_BFu31i_BFu9s_BFu15i()
{
  {
    init_simple_test("BFu31i_BFu9s_BFu15i");
    static STRUCT_IF_C BFu31i_BFu9s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, 5, 1, 15, 1, "BFu31i_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, 5, 1, 15, hide_ull(1LL<<14), "BFu31i_BFu9s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_BFu15i, BFu31i_BFu9s_BFu15i)
//============================================================================


struct  BFu31i_BFu9s_BFu15ll  {
  unsigned int v1:31;
  unsigned short v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_BFu9s_BFu15ll) C1{ Fi:31 Fs:9 FL:15}



static void Test_BFu31i_BFu9s_BFu15ll()
{
  {
    init_simple_test("BFu31i_BFu9s_BFu15ll");
    static STRUCT_IF_C BFu31i_BFu9s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, 5, 1, 15, 1, "BFu31i_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, 5, 1, 15, hide_ull(1LL<<14), "BFu31i_BFu9s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_BFu15ll, BFu31i_BFu9s_BFu15ll)
//============================================================================


struct  BFu31i_BFu9s_BFu15s  {
  unsigned int v1:31;
  unsigned short v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu31i_BFu9s_BFu15s) C1{ Fi:31 Fs:9 Fs:15}



static void Test_BFu31i_BFu9s_BFu15s()
{
  {
    init_simple_test("BFu31i_BFu9s_BFu15s");
    static STRUCT_IF_C BFu31i_BFu9s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu9s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_BFu15s, BFu31i_BFu9s_BFu15s)
//============================================================================


struct  BFu31i_BFu9s_BFu16i  {
  unsigned int v1:31;
  unsigned short v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu31i_BFu9s_BFu16i) C1{ Fi:31 Fs:9 Fi:16}



static void Test_BFu31i_BFu9s_BFu16i()
{
  {
    init_simple_test("BFu31i_BFu9s_BFu16i");
    static STRUCT_IF_C BFu31i_BFu9s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, 5, 1, 16, 1, "BFu31i_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, 5, 1, 16, hide_ull(1LL<<15), "BFu31i_BFu9s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_BFu16i, BFu31i_BFu9s_BFu16i)
//============================================================================


struct  BFu31i_BFu9s_BFu16ll  {
  unsigned int v1:31;
  unsigned short v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_BFu9s_BFu16ll) C1{ Fi:31 Fs:9 FL:16}



static void Test_BFu31i_BFu9s_BFu16ll()
{
  {
    init_simple_test("BFu31i_BFu9s_BFu16ll");
    static STRUCT_IF_C BFu31i_BFu9s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, 5, 1, 16, 1, "BFu31i_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, 5, 1, 16, hide_ull(1LL<<15), "BFu31i_BFu9s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_BFu16ll, BFu31i_BFu9s_BFu16ll)
//============================================================================


struct  BFu31i_BFu9s_BFu16s  {
  unsigned int v1:31;
  unsigned short v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu31i_BFu9s_BFu16s) C1{ Fi:31 Fs:9 Fs:16}



static void Test_BFu31i_BFu9s_BFu16s()
{
  {
    init_simple_test("BFu31i_BFu9s_BFu16s");
    static STRUCT_IF_C BFu31i_BFu9s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu9s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_BFu16s, BFu31i_BFu9s_BFu16s)
//============================================================================


struct  BFu31i_BFu9s_BFu17i  {
  unsigned int v1:31;
  unsigned short v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu31i_BFu9s_BFu17i) C1{ Fi:31 Fs:9 Fi:17}



static void Test_BFu31i_BFu9s_BFu17i()
{
  {
    init_simple_test("BFu31i_BFu9s_BFu17i");
    static STRUCT_IF_C BFu31i_BFu9s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, 5, 1, 17, 1, "BFu31i_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, 5, 1, 17, hide_ull(1LL<<16), "BFu31i_BFu9s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_BFu17i, BFu31i_BFu9s_BFu17i)
//============================================================================


struct  BFu31i_BFu9s_BFu17ll  {
  unsigned int v1:31;
  unsigned short v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_BFu9s_BFu17ll) C1{ Fi:31 Fs:9 FL:17}



static void Test_BFu31i_BFu9s_BFu17ll()
{
  {
    init_simple_test("BFu31i_BFu9s_BFu17ll");
    static STRUCT_IF_C BFu31i_BFu9s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, 5, 1, 17, 1, "BFu31i_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, 5, 1, 17, hide_ull(1LL<<16), "BFu31i_BFu9s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_BFu17ll, BFu31i_BFu9s_BFu17ll)
//============================================================================


struct  BFu31i_BFu9s_BFu1c  {
  unsigned int v1:31;
  unsigned short v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu31i_BFu9s_BFu1c) C1{ Fi:31 Fs:9 Fc:1}



static void Test_BFu31i_BFu9s_BFu1c()
{
  {
    init_simple_test("BFu31i_BFu9s_BFu1c");
    static STRUCT_IF_C BFu31i_BFu9s_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu1c");
    set_bf_and_test(lv, v3, 5, 1, 1, 1, "BFu31i_BFu9s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_BFu1c, BFu31i_BFu9s_BFu1c)
//============================================================================


struct  BFu31i_BFu9s_BFu1i  {
  unsigned int v1:31;
  unsigned short v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu31i_BFu9s_BFu1i) C1{ Fi:31 Fs:9 Fi:1}



static void Test_BFu31i_BFu9s_BFu1i()
{
  {
    init_simple_test("BFu31i_BFu9s_BFu1i");
    static STRUCT_IF_C BFu31i_BFu9s_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu1i");
    set_bf_and_test(lv, v3, 5, 1, 1, 1, "BFu31i_BFu9s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_BFu1i, BFu31i_BFu9s_BFu1i)
//============================================================================


struct  BFu31i_BFu9s_BFu1ll  {
  unsigned int v1:31;
  unsigned short v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_BFu9s_BFu1ll) C1{ Fi:31 Fs:9 FL:1}



static void Test_BFu31i_BFu9s_BFu1ll()
{
  {
    init_simple_test("BFu31i_BFu9s_BFu1ll");
    static STRUCT_IF_C BFu31i_BFu9s_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu1ll");
    set_bf_and_test(lv, v3, 5, 1, 1, 1, "BFu31i_BFu9s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_BFu1ll, BFu31i_BFu9s_BFu1ll)
//============================================================================


struct  BFu31i_BFu9s_BFu1s  {
  unsigned int v1:31;
  unsigned short v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu31i_BFu9s_BFu1s) C1{ Fi:31 Fs:9 Fs:1}



static void Test_BFu31i_BFu9s_BFu1s()
{
  {
    init_simple_test("BFu31i_BFu9s_BFu1s");
    static STRUCT_IF_C BFu31i_BFu9s_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu1s");
    set_bf_and_test(lv, v3, 5, 1, 1, 1, "BFu31i_BFu9s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_BFu1s, BFu31i_BFu9s_BFu1s)
//============================================================================


struct  BFu31i_BFu9s_BFu31i  {
  unsigned int v1:31;
  unsigned short v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu31i_BFu9s_BFu31i) C1{ Fi:31 Fs:9 Fi:31}



static void Test_BFu31i_BFu9s_BFu31i()
{
  {
    init_simple_test("BFu31i_BFu9s_BFu31i");
    static STRUCT_IF_C BFu31i_BFu9s_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu9s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_BFu9s_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_BFu31i, BFu31i_BFu9s_BFu31i)
//============================================================================


struct  BFu31i_BFu9s_BFu31ll  {
  unsigned int v1:31;
  unsigned short v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_BFu9s_BFu31ll) C1{ Fi:31 Fs:9 FL:31}



static void Test_BFu31i_BFu9s_BFu31ll()
{
  {
    init_simple_test("BFu31i_BFu9s_BFu31ll");
    static STRUCT_IF_C BFu31i_BFu9s_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu9s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 31, 1, "BFu31i_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_BFu31ll, BFu31i_BFu9s_BFu31ll)
//============================================================================


struct  BFu31i_BFu9s_BFu32i  {
  unsigned int v1:31;
  unsigned short v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu31i_BFu9s_BFu32i) C1{ Fi:31 Fs:9 Fi:32}



static void Test_BFu31i_BFu9s_BFu32i()
{
  {
    init_simple_test("BFu31i_BFu9s_BFu32i");
    static STRUCT_IF_C BFu31i_BFu9s_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu9s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_BFu9s_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu9s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_BFu32i, BFu31i_BFu9s_BFu32i)
//============================================================================


struct  BFu31i_BFu9s_BFu32ll  {
  unsigned int v1:31;
  unsigned short v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_BFu9s_BFu32ll) C1{ Fi:31 Fs:9 FL:32}



static void Test_BFu31i_BFu9s_BFu32ll()
{
  {
    init_simple_test("BFu31i_BFu9s_BFu32ll");
    static STRUCT_IF_C BFu31i_BFu9s_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu9s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 32, 1, "BFu31i_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 32, hide_ull(1LL<<31), "BFu31i_BFu9s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_BFu32ll, BFu31i_BFu9s_BFu32ll)
//============================================================================


struct  BFu31i_BFu9s_BFu33  {
  unsigned int v1:31;
  unsigned short v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_BFu9s_BFu33) C1{ Fi:31 Fs:9 FL:33}



static void Test_BFu31i_BFu9s_BFu33()
{
  {
    init_simple_test("BFu31i_BFu9s_BFu33");
    static STRUCT_IF_C BFu31i_BFu9s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu9s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 33, 1, "BFu31i_BFu9s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 33, hide_ull(1LL<<32), "BFu31i_BFu9s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_BFu33, BFu31i_BFu9s_BFu33)
//============================================================================


struct  BFu31i_BFu9s_BFu7c  {
  unsigned int v1:31;
  unsigned short v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu31i_BFu9s_BFu7c) C1{ Fi:31 Fs:9 Fc:7}



static void Test_BFu31i_BFu9s_BFu7c()
{
  {
    init_simple_test("BFu31i_BFu9s_BFu7c");
    static STRUCT_IF_C BFu31i_BFu9s_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, 5, 1, 7, 1, "BFu31i_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, 5, 1, 7, hide_ull(1LL<<6), "BFu31i_BFu9s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_BFu7c, BFu31i_BFu9s_BFu7c)
//============================================================================


struct  BFu31i_BFu9s_BFu7i  {
  unsigned int v1:31;
  unsigned short v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu31i_BFu9s_BFu7i) C1{ Fi:31 Fs:9 Fi:7}



static void Test_BFu31i_BFu9s_BFu7i()
{
  {
    init_simple_test("BFu31i_BFu9s_BFu7i");
    static STRUCT_IF_C BFu31i_BFu9s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, 5, 1, 7, 1, "BFu31i_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, 5, 1, 7, hide_ull(1LL<<6), "BFu31i_BFu9s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_BFu7i, BFu31i_BFu9s_BFu7i)
//============================================================================


struct  BFu31i_BFu9s_BFu7ll  {
  unsigned int v1:31;
  unsigned short v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_BFu9s_BFu7ll) C1{ Fi:31 Fs:9 FL:7}



static void Test_BFu31i_BFu9s_BFu7ll()
{
  {
    init_simple_test("BFu31i_BFu9s_BFu7ll");
    static STRUCT_IF_C BFu31i_BFu9s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, 5, 1, 7, 1, "BFu31i_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, 5, 1, 7, hide_ull(1LL<<6), "BFu31i_BFu9s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_BFu7ll, BFu31i_BFu9s_BFu7ll)
//============================================================================


struct  BFu31i_BFu9s_BFu7s  {
  unsigned int v1:31;
  unsigned short v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu31i_BFu9s_BFu7s) C1{ Fi:31 Fs:9 Fs:7}



static void Test_BFu31i_BFu9s_BFu7s()
{
  {
    init_simple_test("BFu31i_BFu9s_BFu7s");
    static STRUCT_IF_C BFu31i_BFu9s_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, 5, 1, 7, 1, "BFu31i_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, 5, 1, 7, hide_ull(1LL<<6), "BFu31i_BFu9s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_BFu7s, BFu31i_BFu9s_BFu7s)
//============================================================================


struct  BFu31i_BFu9s_BFu8c  {
  unsigned int v1:31;
  unsigned short v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu31i_BFu9s_BFu8c) C1{ Fi:31 Fs:9 Fc:8}



static void Test_BFu31i_BFu9s_BFu8c()
{
  {
    init_simple_test("BFu31i_BFu9s_BFu8c");
    static STRUCT_IF_C BFu31i_BFu9s_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu9s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_BFu8c, BFu31i_BFu9s_BFu8c)
//============================================================================


struct  BFu31i_BFu9s_BFu8i  {
  unsigned int v1:31;
  unsigned short v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu31i_BFu9s_BFu8i) C1{ Fi:31 Fs:9 Fi:8}



static void Test_BFu31i_BFu9s_BFu8i()
{
  {
    init_simple_test("BFu31i_BFu9s_BFu8i");
    static STRUCT_IF_C BFu31i_BFu9s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, 5, 1, 8, 1, "BFu31i_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, 5, 1, 8, hide_ull(1LL<<7), "BFu31i_BFu9s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_BFu8i, BFu31i_BFu9s_BFu8i)
//============================================================================


struct  BFu31i_BFu9s_BFu8ll  {
  unsigned int v1:31;
  unsigned short v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_BFu9s_BFu8ll) C1{ Fi:31 Fs:9 FL:8}



static void Test_BFu31i_BFu9s_BFu8ll()
{
  {
    init_simple_test("BFu31i_BFu9s_BFu8ll");
    static STRUCT_IF_C BFu31i_BFu9s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, 5, 1, 8, 1, "BFu31i_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, 5, 1, 8, hide_ull(1LL<<7), "BFu31i_BFu9s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_BFu8ll, BFu31i_BFu9s_BFu8ll)
//============================================================================


struct  BFu31i_BFu9s_BFu8s  {
  unsigned int v1:31;
  unsigned short v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu31i_BFu9s_BFu8s) C1{ Fi:31 Fs:9 Fs:8}



static void Test_BFu31i_BFu9s_BFu8s()
{
  {
    init_simple_test("BFu31i_BFu9s_BFu8s");
    static STRUCT_IF_C BFu31i_BFu9s_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu9s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_BFu8s, BFu31i_BFu9s_BFu8s)
//============================================================================


struct  BFu31i_BFu9s_BFu9i  {
  unsigned int v1:31;
  unsigned short v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu31i_BFu9s_BFu9i) C1{ Fi:31 Fs:9 Fi:9}



static void Test_BFu31i_BFu9s_BFu9i()
{
  {
    init_simple_test("BFu31i_BFu9s_BFu9i");
    static STRUCT_IF_C BFu31i_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 5, 1, 9, 1, "BFu31i_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 5, 1, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_BFu9i, BFu31i_BFu9s_BFu9i)
//============================================================================


struct  BFu31i_BFu9s_BFu9ll  {
  unsigned int v1:31;
  unsigned short v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_BFu9s_BFu9ll) C1{ Fi:31 Fs:9 FL:9}



static void Test_BFu31i_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFu31i_BFu9s_BFu9ll");
    static STRUCT_IF_C BFu31i_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 5, 1, 9, 1, "BFu31i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 5, 1, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_BFu9ll, BFu31i_BFu9s_BFu9ll)
//============================================================================


struct  BFu31i_BFu9s_BFu9s  {
  unsigned int v1:31;
  unsigned short v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu31i_BFu9s_BFu9s) C1{ Fi:31 Fs:9 Fs:9}



static void Test_BFu31i_BFu9s_BFu9s()
{
  {
    init_simple_test("BFu31i_BFu9s_BFu9s");
    static STRUCT_IF_C BFu31i_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31i_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_BFu9s, BFu31i_BFu9s_BFu9s)
//============================================================================


struct  BFu31i_BFu9s_C  {
  unsigned int v1:31;
  unsigned short v2:9;
  char v3;
};
//SIG(1 BFu31i_BFu9s_C) C1{ Fi:31 Fs:9 Fc}



static void Test_BFu31i_BFu9s_C()
{
  {
    init_simple_test("BFu31i_BFu9s_C");
    static STRUCT_IF_C BFu31i_BFu9s_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9s_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_C");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_C");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_C");
    check_field_offset(lv, v3, 6, "BFu31i_BFu9s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_C, BFu31i_BFu9s_C)
//============================================================================


struct  BFu31i_BFu9s_D  {
  unsigned int v1:31;
  unsigned short v2:9;
  double v3;
};
//SIG(1 BFu31i_BFu9s_D) C1{ Fi:31 Fs:9 FL}



static void Test_BFu31i_BFu9s_D()
{
  {
    init_simple_test("BFu31i_BFu9s_D");
    static STRUCT_IF_C BFu31i_BFu9s_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu9s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9s_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_D");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_D");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_D");
    check_field_offset(lv, v3, 8, "BFu31i_BFu9s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_D, BFu31i_BFu9s_D)
//============================================================================


struct  BFu31i_BFu9s_F  {
  unsigned int v1:31;
  unsigned short v2:9;
  float v3;
};
//SIG(1 BFu31i_BFu9s_F) C1{ Fi:31 Fs:9 Fi}



static void Test_BFu31i_BFu9s_F()
{
  {
    init_simple_test("BFu31i_BFu9s_F");
    static STRUCT_IF_C BFu31i_BFu9s_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu9s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9s_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_F");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_F");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_F");
    check_field_offset(lv, v3, 8, "BFu31i_BFu9s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_F, BFu31i_BFu9s_F)
//============================================================================


struct  BFu31i_BFu9s_I  {
  unsigned int v1:31;
  unsigned short v2:9;
  int v3;
};
//SIG(1 BFu31i_BFu9s_I) C1{ Fi:31 Fs:9 Fi}



static void Test_BFu31i_BFu9s_I()
{
  {
    init_simple_test("BFu31i_BFu9s_I");
    static STRUCT_IF_C BFu31i_BFu9s_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu9s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9s_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_I");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_I");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_I");
    check_field_offset(lv, v3, 8, "BFu31i_BFu9s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_I, BFu31i_BFu9s_I)
//============================================================================


struct  BFu31i_BFu9s_Ip  {
  unsigned int v1:31;
  unsigned short v2:9;
  int *v3;
};
//SIG(1 BFu31i_BFu9s_Ip) C1{ Fi:31 Fs:9 Fp}



static void Test_BFu31i_BFu9s_Ip()
{
  {
    init_simple_test("BFu31i_BFu9s_Ip");
    static STRUCT_IF_C BFu31i_BFu9s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu9s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_Ip");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_Ip");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_Ip");
    check_field_offset(lv, v3, 8, "BFu31i_BFu9s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_Ip, BFu31i_BFu9s_Ip)
//============================================================================


struct  BFu31i_BFu9s_L  {
  unsigned int v1:31;
  unsigned short v2:9;
  __tsi64 v3;
};
//SIG(1 BFu31i_BFu9s_L) C1{ Fi:31 Fs:9 FL}



static void Test_BFu31i_BFu9s_L()
{
  {
    init_simple_test("BFu31i_BFu9s_L");
    static STRUCT_IF_C BFu31i_BFu9s_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu9s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9s_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_L");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_L");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_L");
    check_field_offset(lv, v3, 8, "BFu31i_BFu9s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_L, BFu31i_BFu9s_L)
//============================================================================


struct  BFu31i_BFu9s_S  {
  unsigned int v1:31;
  unsigned short v2:9;
  short v3;
};
//SIG(1 BFu31i_BFu9s_S) C1{ Fi:31 Fs:9 Fs}



static void Test_BFu31i_BFu9s_S()
{
  {
    init_simple_test("BFu31i_BFu9s_S");
    static STRUCT_IF_C BFu31i_BFu9s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9s_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_S");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_S");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_S");
    check_field_offset(lv, v3, 6, "BFu31i_BFu9s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_S, BFu31i_BFu9s_S)
//============================================================================


struct  BFu31i_BFu9s_Uc  {
  unsigned int v1:31;
  unsigned short v2:9;
  unsigned char v3;
};
//SIG(1 BFu31i_BFu9s_Uc) C1{ Fi:31 Fs:9 Fc}



static void Test_BFu31i_BFu9s_Uc()
{
  {
    init_simple_test("BFu31i_BFu9s_Uc");
    static STRUCT_IF_C BFu31i_BFu9s_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_Uc");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_Uc");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_Uc");
    check_field_offset(lv, v3, 6, "BFu31i_BFu9s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_Uc, BFu31i_BFu9s_Uc)
//============================================================================


struct  BFu31i_BFu9s_Ui  {
  unsigned int v1:31;
  unsigned short v2:9;
  unsigned int v3;
};
//SIG(1 BFu31i_BFu9s_Ui) C1{ Fi:31 Fs:9 Fi}



static void Test_BFu31i_BFu9s_Ui()
{
  {
    init_simple_test("BFu31i_BFu9s_Ui");
    static STRUCT_IF_C BFu31i_BFu9s_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu9s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_Ui");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_Ui");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_Ui");
    check_field_offset(lv, v3, 8, "BFu31i_BFu9s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_Ui, BFu31i_BFu9s_Ui)
//============================================================================


struct  BFu31i_BFu9s_Ul  {
  unsigned int v1:31;
  unsigned short v2:9;
  __tsu64 v3;
};
//SIG(1 BFu31i_BFu9s_Ul) C1{ Fi:31 Fs:9 FL}



static void Test_BFu31i_BFu9s_Ul()
{
  {
    init_simple_test("BFu31i_BFu9s_Ul");
    static STRUCT_IF_C BFu31i_BFu9s_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_BFu9s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_Ul");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_Ul");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_Ul");
    check_field_offset(lv, v3, 8, "BFu31i_BFu9s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_Ul, BFu31i_BFu9s_Ul)
//============================================================================


struct  BFu31i_BFu9s_Us  {
  unsigned int v1:31;
  unsigned short v2:9;
  unsigned short v3;
};
//SIG(1 BFu31i_BFu9s_Us) C1{ Fi:31 Fs:9 Fs}



static void Test_BFu31i_BFu9s_Us()
{
  {
    init_simple_test("BFu31i_BFu9s_Us");
    static STRUCT_IF_C BFu31i_BFu9s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_Us");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_Us");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_Us");
    check_field_offset(lv, v3, 6, "BFu31i_BFu9s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_Us, BFu31i_BFu9s_Us)
//============================================================================


struct  BFu31i_BFu9s_Vp  {
  unsigned int v1:31;
  unsigned short v2:9;
  void *v3;
};
//SIG(1 BFu31i_BFu9s_Vp) C1{ Fi:31 Fs:9 Fp}



static void Test_BFu31i_BFu9s_Vp()
{
  {
    init_simple_test("BFu31i_BFu9s_Vp");
    static STRUCT_IF_C BFu31i_BFu9s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu9s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_Vp");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_Vp");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_Vp");
    check_field_offset(lv, v3, 8, "BFu31i_BFu9s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_BFu9s_Vp, BFu31i_BFu9s_Vp)
//============================================================================


struct  BFu31i_C  {
  unsigned int v1:31;
  char v2;
};
//SIG(1 BFu31i_C) C1{ Fi:31 Fc}



static void Test_BFu31i_C()
{
  {
    init_simple_test("BFu31i_C");
    static STRUCT_IF_C BFu31i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C");
    check_field_offset(lv, v2, 4, "BFu31i_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C, BFu31i_C)
//============================================================================


struct  BFu31i_C_BFu15i  {
  unsigned int v1:31;
  char v2;
  unsigned int v3:15;
};
//SIG(1 BFu31i_C_BFu15i) C1{ Fi:31 Fc Fi:15}



static void Test_BFu31i_C_BFu15i()
{
  {
    init_simple_test("BFu31i_C_BFu15i");
    static STRUCT_IF_C BFu31i_C_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_C_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu15i");
    check_field_offset(lv, v2, 4, "BFu31i_C_BFu15i.v2");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu31i_C_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu31i_C_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_BFu15i, BFu31i_C_BFu15i)
//============================================================================


struct  BFu31i_C_BFu15ll  {
  unsigned int v1:31;
  char v2;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_C_BFu15ll) C1{ Fi:31 Fc FL:15}



static void Test_BFu31i_C_BFu15ll()
{
  {
    init_simple_test("BFu31i_C_BFu15ll");
    static STRUCT_IF_C BFu31i_C_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_C_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu31i_C_BFu15ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu31i_C_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu31i_C_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_BFu15ll, BFu31i_C_BFu15ll)
//============================================================================


struct  BFu31i_C_BFu15s  {
  unsigned int v1:31;
  char v2;
  unsigned short v3:15;
};
//SIG(1 BFu31i_C_BFu15s) C1{ Fi:31 Fc Fs:15}



static void Test_BFu31i_C_BFu15s()
{
  {
    init_simple_test("BFu31i_C_BFu15s");
    static STRUCT_IF_C BFu31i_C_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_C_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu15s");
    check_field_offset(lv, v2, 4, "BFu31i_C_BFu15s.v2");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_C_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_C_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_BFu15s, BFu31i_C_BFu15s)
//============================================================================


struct  BFu31i_C_BFu16i  {
  unsigned int v1:31;
  char v2;
  unsigned int v3:16;
};
//SIG(1 BFu31i_C_BFu16i) C1{ Fi:31 Fc Fi:16}



static void Test_BFu31i_C_BFu16i()
{
  {
    init_simple_test("BFu31i_C_BFu16i");
    static STRUCT_IF_C BFu31i_C_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_C_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu16i");
    check_field_offset(lv, v2, 4, "BFu31i_C_BFu16i.v2");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu31i_C_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu31i_C_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_BFu16i, BFu31i_C_BFu16i)
//============================================================================


struct  BFu31i_C_BFu16ll  {
  unsigned int v1:31;
  char v2;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_C_BFu16ll) C1{ Fi:31 Fc FL:16}



static void Test_BFu31i_C_BFu16ll()
{
  {
    init_simple_test("BFu31i_C_BFu16ll");
    static STRUCT_IF_C BFu31i_C_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_C_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu31i_C_BFu16ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu31i_C_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu31i_C_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_BFu16ll, BFu31i_C_BFu16ll)
//============================================================================


struct  BFu31i_C_BFu16s  {
  unsigned int v1:31;
  char v2;
  unsigned short v3:16;
};
//SIG(1 BFu31i_C_BFu16s) C1{ Fi:31 Fc Fs:16}



static void Test_BFu31i_C_BFu16s()
{
  {
    init_simple_test("BFu31i_C_BFu16s");
    static STRUCT_IF_C BFu31i_C_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_C_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu16s");
    check_field_offset(lv, v2, 4, "BFu31i_C_BFu16s.v2");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_C_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_C_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_BFu16s, BFu31i_C_BFu16s)
//============================================================================


struct  BFu31i_C_BFu17i  {
  unsigned int v1:31;
  char v2;
  unsigned int v3:17;
};
//SIG(1 BFu31i_C_BFu17i) C1{ Fi:31 Fc Fi:17}



static void Test_BFu31i_C_BFu17i()
{
  {
    init_simple_test("BFu31i_C_BFu17i");
    static STRUCT_IF_C BFu31i_C_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_C_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu17i");
    check_field_offset(lv, v2, 4, "BFu31i_C_BFu17i.v2");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu31i_C_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu31i_C_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_BFu17i, BFu31i_C_BFu17i)
//============================================================================


struct  BFu31i_C_BFu17ll  {
  unsigned int v1:31;
  char v2;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_C_BFu17ll) C1{ Fi:31 Fc FL:17}



static void Test_BFu31i_C_BFu17ll()
{
  {
    init_simple_test("BFu31i_C_BFu17ll");
    static STRUCT_IF_C BFu31i_C_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_C_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu31i_C_BFu17ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu31i_C_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu31i_C_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_BFu17ll, BFu31i_C_BFu17ll)
//============================================================================


struct  BFu31i_C_BFu1c  {
  unsigned int v1:31;
  char v2;
  unsigned char v3:1;
};
//SIG(1 BFu31i_C_BFu1c) C1{ Fi:31 Fc Fc:1}



static void Test_BFu31i_C_BFu1c()
{
  {
    init_simple_test("BFu31i_C_BFu1c");
    static STRUCT_IF_C BFu31i_C_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_C_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu1c");
    check_field_offset(lv, v2, 4, "BFu31i_C_BFu1c.v2");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31i_C_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_BFu1c, BFu31i_C_BFu1c)
//============================================================================


struct  BFu31i_C_BFu1i  {
  unsigned int v1:31;
  char v2;
  unsigned int v3:1;
};
//SIG(1 BFu31i_C_BFu1i) C1{ Fi:31 Fc Fi:1}



static void Test_BFu31i_C_BFu1i()
{
  {
    init_simple_test("BFu31i_C_BFu1i");
    static STRUCT_IF_C BFu31i_C_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_C_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu1i");
    check_field_offset(lv, v2, 4, "BFu31i_C_BFu1i.v2");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31i_C_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_BFu1i, BFu31i_C_BFu1i)
//============================================================================


struct  BFu31i_C_BFu1ll  {
  unsigned int v1:31;
  char v2;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_C_BFu1ll) C1{ Fi:31 Fc FL:1}



static void Test_BFu31i_C_BFu1ll()
{
  {
    init_simple_test("BFu31i_C_BFu1ll");
    static STRUCT_IF_C BFu31i_C_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_C_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu31i_C_BFu1ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31i_C_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_BFu1ll, BFu31i_C_BFu1ll)
//============================================================================


struct  BFu31i_C_BFu1s  {
  unsigned int v1:31;
  char v2;
  unsigned short v3:1;
};
//SIG(1 BFu31i_C_BFu1s) C1{ Fi:31 Fc Fs:1}



static void Test_BFu31i_C_BFu1s()
{
  {
    init_simple_test("BFu31i_C_BFu1s");
    static STRUCT_IF_C BFu31i_C_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_C_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu1s");
    check_field_offset(lv, v2, 4, "BFu31i_C_BFu1s.v2");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31i_C_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_BFu1s, BFu31i_C_BFu1s)
//============================================================================


struct  BFu31i_C_BFu31i  {
  unsigned int v1:31;
  char v2;
  unsigned int v3:31;
};
//SIG(1 BFu31i_C_BFu31i) C1{ Fi:31 Fc Fi:31}



static void Test_BFu31i_C_BFu31i()
{
  {
    init_simple_test("BFu31i_C_BFu31i");
    static STRUCT_IF_C BFu31i_C_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_C_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_C_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu31i");
    check_field_offset(lv, v2, 4, "BFu31i_C_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_C_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_BFu31i, BFu31i_C_BFu31i)
//============================================================================


struct  BFu31i_C_BFu31ll  {
  unsigned int v1:31;
  char v2;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_C_BFu31ll) C1{ Fi:31 Fc FL:31}



static void Test_BFu31i_C_BFu31ll()
{
  {
    init_simple_test("BFu31i_C_BFu31ll");
    static STRUCT_IF_C BFu31i_C_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_C_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_C_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu31i_C_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, 1, "BFu31i_C_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_BFu31ll, BFu31i_C_BFu31ll)
//============================================================================


struct  BFu31i_C_BFu32i  {
  unsigned int v1:31;
  char v2;
  unsigned int v3:32;
};
//SIG(1 BFu31i_C_BFu32i) C1{ Fi:31 Fc Fi:32}



static void Test_BFu31i_C_BFu32i()
{
  {
    init_simple_test("BFu31i_C_BFu32i");
    static STRUCT_IF_C BFu31i_C_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_C_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_C_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu32i");
    check_field_offset(lv, v2, 4, "BFu31i_C_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_C_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_C_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_BFu32i, BFu31i_C_BFu32i)
//============================================================================


struct  BFu31i_C_BFu32ll  {
  unsigned int v1:31;
  char v2;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_C_BFu32ll) C1{ Fi:31 Fc FL:32}



static void Test_BFu31i_C_BFu32ll()
{
  {
    init_simple_test("BFu31i_C_BFu32ll");
    static STRUCT_IF_C BFu31i_C_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_C_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_C_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu31i_C_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, 1, "BFu31i_C_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, hide_ull(1LL<<31), "BFu31i_C_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_BFu32ll, BFu31i_C_BFu32ll)
//============================================================================


struct  BFu31i_C_BFu33  {
  unsigned int v1:31;
  char v2;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_C_BFu33) C1{ Fi:31 Fc FL:33}



static void Test_BFu31i_C_BFu33()
{
  {
    init_simple_test("BFu31i_C_BFu33");
    static STRUCT_IF_C BFu31i_C_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_C_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_C_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu33");
    check_field_offset(lv, v2, 4, "BFu31i_C_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, 1, "BFu31i_C_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, hide_ull(1LL<<32), "BFu31i_C_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_BFu33, BFu31i_C_BFu33)
//============================================================================


struct  BFu31i_C_BFu7c  {
  unsigned int v1:31;
  char v2;
  unsigned char v3:7;
};
//SIG(1 BFu31i_C_BFu7c) C1{ Fi:31 Fc Fc:7}



static void Test_BFu31i_C_BFu7c()
{
  {
    init_simple_test("BFu31i_C_BFu7c");
    static STRUCT_IF_C BFu31i_C_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_C_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu7c");
    check_field_offset(lv, v2, 4, "BFu31i_C_BFu7c.v2");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_C_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_C_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_BFu7c, BFu31i_C_BFu7c)
//============================================================================


struct  BFu31i_C_BFu7i  {
  unsigned int v1:31;
  char v2;
  unsigned int v3:7;
};
//SIG(1 BFu31i_C_BFu7i) C1{ Fi:31 Fc Fi:7}



static void Test_BFu31i_C_BFu7i()
{
  {
    init_simple_test("BFu31i_C_BFu7i");
    static STRUCT_IF_C BFu31i_C_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_C_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu7i");
    check_field_offset(lv, v2, 4, "BFu31i_C_BFu7i.v2");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_C_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_C_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_BFu7i, BFu31i_C_BFu7i)
//============================================================================


struct  BFu31i_C_BFu7ll  {
  unsigned int v1:31;
  char v2;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_C_BFu7ll) C1{ Fi:31 Fc FL:7}



static void Test_BFu31i_C_BFu7ll()
{
  {
    init_simple_test("BFu31i_C_BFu7ll");
    static STRUCT_IF_C BFu31i_C_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_C_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu31i_C_BFu7ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_C_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_C_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_BFu7ll, BFu31i_C_BFu7ll)
//============================================================================


struct  BFu31i_C_BFu7s  {
  unsigned int v1:31;
  char v2;
  unsigned short v3:7;
};
//SIG(1 BFu31i_C_BFu7s) C1{ Fi:31 Fc Fs:7}



static void Test_BFu31i_C_BFu7s()
{
  {
    init_simple_test("BFu31i_C_BFu7s");
    static STRUCT_IF_C BFu31i_C_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_C_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu7s");
    check_field_offset(lv, v2, 4, "BFu31i_C_BFu7s.v2");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_C_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_C_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_BFu7s, BFu31i_C_BFu7s)
//============================================================================


struct  BFu31i_C_BFu8c  {
  unsigned int v1:31;
  char v2;
  unsigned char v3:8;
};
//SIG(1 BFu31i_C_BFu8c) C1{ Fi:31 Fc Fc:8}



static void Test_BFu31i_C_BFu8c()
{
  {
    init_simple_test("BFu31i_C_BFu8c");
    static STRUCT_IF_C BFu31i_C_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_C_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu8c");
    check_field_offset(lv, v2, 4, "BFu31i_C_BFu8c.v2");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_C_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_C_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_BFu8c, BFu31i_C_BFu8c)
//============================================================================


struct  BFu31i_C_BFu8i  {
  unsigned int v1:31;
  char v2;
  unsigned int v3:8;
};
//SIG(1 BFu31i_C_BFu8i) C1{ Fi:31 Fc Fi:8}



static void Test_BFu31i_C_BFu8i()
{
  {
    init_simple_test("BFu31i_C_BFu8i");
    static STRUCT_IF_C BFu31i_C_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_C_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu8i");
    check_field_offset(lv, v2, 4, "BFu31i_C_BFu8i.v2");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_C_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_C_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_BFu8i, BFu31i_C_BFu8i)
//============================================================================


struct  BFu31i_C_BFu8ll  {
  unsigned int v1:31;
  char v2;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_C_BFu8ll) C1{ Fi:31 Fc FL:8}



static void Test_BFu31i_C_BFu8ll()
{
  {
    init_simple_test("BFu31i_C_BFu8ll");
    static STRUCT_IF_C BFu31i_C_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_C_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu31i_C_BFu8ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_C_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_C_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_BFu8ll, BFu31i_C_BFu8ll)
//============================================================================


struct  BFu31i_C_BFu8s  {
  unsigned int v1:31;
  char v2;
  unsigned short v3:8;
};
//SIG(1 BFu31i_C_BFu8s) C1{ Fi:31 Fc Fs:8}



static void Test_BFu31i_C_BFu8s()
{
  {
    init_simple_test("BFu31i_C_BFu8s");
    static STRUCT_IF_C BFu31i_C_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_C_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu8s");
    check_field_offset(lv, v2, 4, "BFu31i_C_BFu8s.v2");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_C_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_C_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_BFu8s, BFu31i_C_BFu8s)
//============================================================================


struct  BFu31i_C_BFu9i  {
  unsigned int v1:31;
  char v2;
  unsigned int v3:9;
};
//SIG(1 BFu31i_C_BFu9i) C1{ Fi:31 Fc Fi:9}



static void Test_BFu31i_C_BFu9i()
{
  {
    init_simple_test("BFu31i_C_BFu9i");
    static STRUCT_IF_C BFu31i_C_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_C_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu9i");
    check_field_offset(lv, v2, 4, "BFu31i_C_BFu9i.v2");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu31i_C_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu31i_C_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_BFu9i, BFu31i_C_BFu9i)
//============================================================================


struct  BFu31i_C_BFu9ll  {
  unsigned int v1:31;
  char v2;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_C_BFu9ll) C1{ Fi:31 Fc FL:9}



static void Test_BFu31i_C_BFu9ll()
{
  {
    init_simple_test("BFu31i_C_BFu9ll");
    static STRUCT_IF_C BFu31i_C_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_C_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu31i_C_BFu9ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu31i_C_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu31i_C_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_BFu9ll, BFu31i_C_BFu9ll)
//============================================================================


struct  BFu31i_C_BFu9s  {
  unsigned int v1:31;
  char v2;
  unsigned short v3:9;
};
//SIG(1 BFu31i_C_BFu9s) C1{ Fi:31 Fc Fs:9}



static void Test_BFu31i_C_BFu9s()
{
  {
    init_simple_test("BFu31i_C_BFu9s");
    static STRUCT_IF_C BFu31i_C_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_C_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_BFu9s");
    check_field_offset(lv, v2, 4, "BFu31i_C_BFu9s.v2");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31i_C_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31i_C_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_BFu9s, BFu31i_C_BFu9s)
//============================================================================


struct  BFu31i_C_C  {
  unsigned int v1:31;
  char v2;
  char v3;
};
//SIG(1 BFu31i_C_C) C1{ Fi:31 Fc[2]}



static void Test_BFu31i_C_C()
{
  {
    init_simple_test("BFu31i_C_C");
    static STRUCT_IF_C BFu31i_C_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_C_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_C");
    check_field_offset(lv, v2, 4, "BFu31i_C_C.v2");
    check_field_offset(lv, v3, 5, "BFu31i_C_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_C, BFu31i_C_C)
//============================================================================


struct  BFu31i_C_D  {
  unsigned int v1:31;
  char v2;
  double v3;
};
//SIG(1 BFu31i_C_D) C1{ Fi:31 Fc FL}



static void Test_BFu31i_C_D()
{
  {
    init_simple_test("BFu31i_C_D");
    static STRUCT_IF_C BFu31i_C_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_C_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_C_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_D");
    check_field_offset(lv, v2, 4, "BFu31i_C_D.v2");
    check_field_offset(lv, v3, 8, "BFu31i_C_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_D, BFu31i_C_D)
//============================================================================


struct  BFu31i_C_F  {
  unsigned int v1:31;
  char v2;
  float v3;
};
//SIG(1 BFu31i_C_F) C1{ Fi:31 Fc Fi}



static void Test_BFu31i_C_F()
{
  {
    init_simple_test("BFu31i_C_F");
    static STRUCT_IF_C BFu31i_C_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_C_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_C_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_F");
    check_field_offset(lv, v2, 4, "BFu31i_C_F.v2");
    check_field_offset(lv, v3, 8, "BFu31i_C_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_F, BFu31i_C_F)
//============================================================================


struct  BFu31i_C_I  {
  unsigned int v1:31;
  char v2;
  int v3;
};
//SIG(1 BFu31i_C_I) C1{ Fi:31 Fc Fi}



static void Test_BFu31i_C_I()
{
  {
    init_simple_test("BFu31i_C_I");
    static STRUCT_IF_C BFu31i_C_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_C_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_C_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_I");
    check_field_offset(lv, v2, 4, "BFu31i_C_I.v2");
    check_field_offset(lv, v3, 8, "BFu31i_C_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_I, BFu31i_C_I)
//============================================================================


struct  BFu31i_C_Ip  {
  unsigned int v1:31;
  char v2;
  int *v3;
};
//SIG(1 BFu31i_C_Ip) C1{ Fi:31 Fc Fp}



static void Test_BFu31i_C_Ip()
{
  {
    init_simple_test("BFu31i_C_Ip");
    static STRUCT_IF_C BFu31i_C_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_C_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_C_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_Ip");
    check_field_offset(lv, v2, 4, "BFu31i_C_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu31i_C_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_Ip, BFu31i_C_Ip)
//============================================================================


struct  BFu31i_C_L  {
  unsigned int v1:31;
  char v2;
  __tsi64 v3;
};
//SIG(1 BFu31i_C_L) C1{ Fi:31 Fc FL}



static void Test_BFu31i_C_L()
{
  {
    init_simple_test("BFu31i_C_L");
    static STRUCT_IF_C BFu31i_C_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_C_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_C_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_L");
    check_field_offset(lv, v2, 4, "BFu31i_C_L.v2");
    check_field_offset(lv, v3, 8, "BFu31i_C_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_L, BFu31i_C_L)
//============================================================================


struct  BFu31i_C_S  {
  unsigned int v1:31;
  char v2;
  short v3;
};
//SIG(1 BFu31i_C_S) C1{ Fi:31 Fc Fs}



static void Test_BFu31i_C_S()
{
  {
    init_simple_test("BFu31i_C_S");
    static STRUCT_IF_C BFu31i_C_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_C_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_S");
    check_field_offset(lv, v2, 4, "BFu31i_C_S.v2");
    check_field_offset(lv, v3, 6, "BFu31i_C_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_S, BFu31i_C_S)
//============================================================================


struct  BFu31i_C_Uc  {
  unsigned int v1:31;
  char v2;
  unsigned char v3;
};
//SIG(1 BFu31i_C_Uc) C1{ Fi:31 Fc[2]}



static void Test_BFu31i_C_Uc()
{
  {
    init_simple_test("BFu31i_C_Uc");
    static STRUCT_IF_C BFu31i_C_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_C_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_Uc");
    check_field_offset(lv, v2, 4, "BFu31i_C_Uc.v2");
    check_field_offset(lv, v3, 5, "BFu31i_C_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_Uc, BFu31i_C_Uc)
//============================================================================


struct  BFu31i_C_Ui  {
  unsigned int v1:31;
  char v2;
  unsigned int v3;
};
//SIG(1 BFu31i_C_Ui) C1{ Fi:31 Fc Fi}



static void Test_BFu31i_C_Ui()
{
  {
    init_simple_test("BFu31i_C_Ui");
    static STRUCT_IF_C BFu31i_C_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_C_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_C_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_Ui");
    check_field_offset(lv, v2, 4, "BFu31i_C_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu31i_C_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_Ui, BFu31i_C_Ui)
//============================================================================


struct  BFu31i_C_Ul  {
  unsigned int v1:31;
  char v2;
  __tsu64 v3;
};
//SIG(1 BFu31i_C_Ul) C1{ Fi:31 Fc FL}



static void Test_BFu31i_C_Ul()
{
  {
    init_simple_test("BFu31i_C_Ul");
    static STRUCT_IF_C BFu31i_C_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_C_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_C_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_Ul");
    check_field_offset(lv, v2, 4, "BFu31i_C_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu31i_C_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_Ul, BFu31i_C_Ul)
//============================================================================


struct  BFu31i_C_Us  {
  unsigned int v1:31;
  char v2;
  unsigned short v3;
};
//SIG(1 BFu31i_C_Us) C1{ Fi:31 Fc Fs}



static void Test_BFu31i_C_Us()
{
  {
    init_simple_test("BFu31i_C_Us");
    static STRUCT_IF_C BFu31i_C_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_C_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_Us");
    check_field_offset(lv, v2, 4, "BFu31i_C_Us.v2");
    check_field_offset(lv, v3, 6, "BFu31i_C_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_Us, BFu31i_C_Us)
//============================================================================


struct  BFu31i_C_Vp  {
  unsigned int v1:31;
  char v2;
  void *v3;
};
//SIG(1 BFu31i_C_Vp) C1{ Fi:31 Fc Fp}



static void Test_BFu31i_C_Vp()
{
  {
    init_simple_test("BFu31i_C_Vp");
    static STRUCT_IF_C BFu31i_C_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_C_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_C_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_Vp");
    check_field_offset(lv, v2, 4, "BFu31i_C_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu31i_C_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_C_Vp, BFu31i_C_Vp)
//============================================================================


struct  BFu31i_D  {
  unsigned int v1:31;
  double v2;
};
//SIG(1 BFu31i_D) C1{ Fi:31 FL}



static void Test_BFu31i_D()
{
  {
    init_simple_test("BFu31i_D");
    static STRUCT_IF_C BFu31i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D, BFu31i_D)
//============================================================================


struct  BFu31i_D_BFu15i  {
  unsigned int v1:31;
  double v2;
  unsigned int v3:15;
};
//SIG(1 BFu31i_D_BFu15i) C1{ Fi:31 FL Fi:15}



static void Test_BFu31i_D_BFu15i()
{
  {
    init_simple_test("BFu31i_D_BFu15i");
    static STRUCT_IF_C BFu31i_D_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu31i_D_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu31i_D_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_BFu15i, BFu31i_D_BFu15i)
//============================================================================


struct  BFu31i_D_BFu15ll  {
  unsigned int v1:31;
  double v2;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_D_BFu15ll) C1{ Fi:31 FL FL:15}



static void Test_BFu31i_D_BFu15ll()
{
  {
    init_simple_test("BFu31i_D_BFu15ll");
    static STRUCT_IF_C BFu31i_D_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu31i_D_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu31i_D_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_BFu15ll, BFu31i_D_BFu15ll)
//============================================================================


struct  BFu31i_D_BFu15s  {
  unsigned int v1:31;
  double v2;
  unsigned short v3:15;
};
//SIG(1 BFu31i_D_BFu15s) C1{ Fi:31 FL Fs:15}



static void Test_BFu31i_D_BFu15s()
{
  {
    init_simple_test("BFu31i_D_BFu15s");
    static STRUCT_IF_C BFu31i_D_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu31i_D_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu31i_D_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_BFu15s, BFu31i_D_BFu15s)
//============================================================================


struct  BFu31i_D_BFu16i  {
  unsigned int v1:31;
  double v2;
  unsigned int v3:16;
};
//SIG(1 BFu31i_D_BFu16i) C1{ Fi:31 FL Fi:16}



static void Test_BFu31i_D_BFu16i()
{
  {
    init_simple_test("BFu31i_D_BFu16i");
    static STRUCT_IF_C BFu31i_D_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu31i_D_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu31i_D_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_BFu16i, BFu31i_D_BFu16i)
//============================================================================


struct  BFu31i_D_BFu16ll  {
  unsigned int v1:31;
  double v2;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_D_BFu16ll) C1{ Fi:31 FL FL:16}



static void Test_BFu31i_D_BFu16ll()
{
  {
    init_simple_test("BFu31i_D_BFu16ll");
    static STRUCT_IF_C BFu31i_D_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu31i_D_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu31i_D_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_BFu16ll, BFu31i_D_BFu16ll)
//============================================================================


struct  BFu31i_D_BFu16s  {
  unsigned int v1:31;
  double v2;
  unsigned short v3:16;
};
//SIG(1 BFu31i_D_BFu16s) C1{ Fi:31 FL Fs:16}



static void Test_BFu31i_D_BFu16s()
{
  {
    init_simple_test("BFu31i_D_BFu16s");
    static STRUCT_IF_C BFu31i_D_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu31i_D_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu31i_D_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_BFu16s, BFu31i_D_BFu16s)
//============================================================================


struct  BFu31i_D_BFu17i  {
  unsigned int v1:31;
  double v2;
  unsigned int v3:17;
};
//SIG(1 BFu31i_D_BFu17i) C1{ Fi:31 FL Fi:17}



static void Test_BFu31i_D_BFu17i()
{
  {
    init_simple_test("BFu31i_D_BFu17i");
    static STRUCT_IF_C BFu31i_D_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu31i_D_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu31i_D_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_BFu17i, BFu31i_D_BFu17i)
//============================================================================


struct  BFu31i_D_BFu17ll  {
  unsigned int v1:31;
  double v2;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_D_BFu17ll) C1{ Fi:31 FL FL:17}



static void Test_BFu31i_D_BFu17ll()
{
  {
    init_simple_test("BFu31i_D_BFu17ll");
    static STRUCT_IF_C BFu31i_D_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu31i_D_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu31i_D_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_BFu17ll, BFu31i_D_BFu17ll)
//============================================================================


struct  BFu31i_D_BFu1c  {
  unsigned int v1:31;
  double v2;
  unsigned char v3:1;
};
//SIG(1 BFu31i_D_BFu1c) C1{ Fi:31 FL Fc:1}



static void Test_BFu31i_D_BFu1c()
{
  {
    init_simple_test("BFu31i_D_BFu1c");
    static STRUCT_IF_C BFu31i_D_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu31i_D_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_BFu1c, BFu31i_D_BFu1c)
//============================================================================


struct  BFu31i_D_BFu1i  {
  unsigned int v1:31;
  double v2;
  unsigned int v3:1;
};
//SIG(1 BFu31i_D_BFu1i) C1{ Fi:31 FL Fi:1}



static void Test_BFu31i_D_BFu1i()
{
  {
    init_simple_test("BFu31i_D_BFu1i");
    static STRUCT_IF_C BFu31i_D_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu31i_D_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_BFu1i, BFu31i_D_BFu1i)
//============================================================================


struct  BFu31i_D_BFu1ll  {
  unsigned int v1:31;
  double v2;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_D_BFu1ll) C1{ Fi:31 FL FL:1}



static void Test_BFu31i_D_BFu1ll()
{
  {
    init_simple_test("BFu31i_D_BFu1ll");
    static STRUCT_IF_C BFu31i_D_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu31i_D_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_BFu1ll, BFu31i_D_BFu1ll)
//============================================================================


struct  BFu31i_D_BFu1s  {
  unsigned int v1:31;
  double v2;
  unsigned short v3:1;
};
//SIG(1 BFu31i_D_BFu1s) C1{ Fi:31 FL Fs:1}



static void Test_BFu31i_D_BFu1s()
{
  {
    init_simple_test("BFu31i_D_BFu1s");
    static STRUCT_IF_C BFu31i_D_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu31i_D_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_BFu1s, BFu31i_D_BFu1s)
//============================================================================


struct  BFu31i_D_BFu31i  {
  unsigned int v1:31;
  double v2;
  unsigned int v3:31;
};
//SIG(1 BFu31i_D_BFu31i) C1{ Fi:31 FL Fi:31}



static void Test_BFu31i_D_BFu31i()
{
  {
    init_simple_test("BFu31i_D_BFu31i");
    static STRUCT_IF_C BFu31i_D_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu31i_D_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_BFu31i, BFu31i_D_BFu31i)
//============================================================================


struct  BFu31i_D_BFu31ll  {
  unsigned int v1:31;
  double v2;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_D_BFu31ll) C1{ Fi:31 FL FL:31}



static void Test_BFu31i_D_BFu31ll()
{
  {
    init_simple_test("BFu31i_D_BFu31ll");
    static STRUCT_IF_C BFu31i_D_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu31i_D_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_BFu31ll, BFu31i_D_BFu31ll)
//============================================================================


struct  BFu31i_D_BFu32i  {
  unsigned int v1:31;
  double v2;
  unsigned int v3:32;
};
//SIG(1 BFu31i_D_BFu32i) C1{ Fi:31 FL Fi:32}



static void Test_BFu31i_D_BFu32i()
{
  {
    init_simple_test("BFu31i_D_BFu32i");
    static STRUCT_IF_C BFu31i_D_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu31i_D_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu31i_D_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_BFu32i, BFu31i_D_BFu32i)
//============================================================================


struct  BFu31i_D_BFu32ll  {
  unsigned int v1:31;
  double v2;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_D_BFu32ll) C1{ Fi:31 FL FL:32}



static void Test_BFu31i_D_BFu32ll()
{
  {
    init_simple_test("BFu31i_D_BFu32ll");
    static STRUCT_IF_C BFu31i_D_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu31i_D_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu31i_D_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_BFu32ll, BFu31i_D_BFu32ll)
//============================================================================


struct  BFu31i_D_BFu33  {
  unsigned int v1:31;
  double v2;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_D_BFu33) C1{ Fi:31 FL FL:33}



static void Test_BFu31i_D_BFu33()
{
  {
    init_simple_test("BFu31i_D_BFu33");
    static STRUCT_IF_C BFu31i_D_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu31i_D_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu31i_D_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu31i_D_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_BFu33, BFu31i_D_BFu33)
//============================================================================


struct  BFu31i_D_BFu7c  {
  unsigned int v1:31;
  double v2;
  unsigned char v3:7;
};
//SIG(1 BFu31i_D_BFu7c) C1{ Fi:31 FL Fc:7}



static void Test_BFu31i_D_BFu7c()
{
  {
    init_simple_test("BFu31i_D_BFu7c");
    static STRUCT_IF_C BFu31i_D_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu31i_D_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu31i_D_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_BFu7c, BFu31i_D_BFu7c)
//============================================================================


struct  BFu31i_D_BFu7i  {
  unsigned int v1:31;
  double v2;
  unsigned int v3:7;
};
//SIG(1 BFu31i_D_BFu7i) C1{ Fi:31 FL Fi:7}



static void Test_BFu31i_D_BFu7i()
{
  {
    init_simple_test("BFu31i_D_BFu7i");
    static STRUCT_IF_C BFu31i_D_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu31i_D_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu31i_D_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_BFu7i, BFu31i_D_BFu7i)
//============================================================================


struct  BFu31i_D_BFu7ll  {
  unsigned int v1:31;
  double v2;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_D_BFu7ll) C1{ Fi:31 FL FL:7}



static void Test_BFu31i_D_BFu7ll()
{
  {
    init_simple_test("BFu31i_D_BFu7ll");
    static STRUCT_IF_C BFu31i_D_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu31i_D_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu31i_D_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_BFu7ll, BFu31i_D_BFu7ll)
//============================================================================


struct  BFu31i_D_BFu7s  {
  unsigned int v1:31;
  double v2;
  unsigned short v3:7;
};
//SIG(1 BFu31i_D_BFu7s) C1{ Fi:31 FL Fs:7}



static void Test_BFu31i_D_BFu7s()
{
  {
    init_simple_test("BFu31i_D_BFu7s");
    static STRUCT_IF_C BFu31i_D_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu31i_D_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu31i_D_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_BFu7s, BFu31i_D_BFu7s)
//============================================================================


struct  BFu31i_D_BFu8c  {
  unsigned int v1:31;
  double v2;
  unsigned char v3:8;
};
//SIG(1 BFu31i_D_BFu8c) C1{ Fi:31 FL Fc:8}



static void Test_BFu31i_D_BFu8c()
{
  {
    init_simple_test("BFu31i_D_BFu8c");
    static STRUCT_IF_C BFu31i_D_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu31i_D_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu31i_D_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_BFu8c, BFu31i_D_BFu8c)
//============================================================================


struct  BFu31i_D_BFu8i  {
  unsigned int v1:31;
  double v2;
  unsigned int v3:8;
};
//SIG(1 BFu31i_D_BFu8i) C1{ Fi:31 FL Fi:8}



static void Test_BFu31i_D_BFu8i()
{
  {
    init_simple_test("BFu31i_D_BFu8i");
    static STRUCT_IF_C BFu31i_D_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu31i_D_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu31i_D_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_BFu8i, BFu31i_D_BFu8i)
//============================================================================


struct  BFu31i_D_BFu8ll  {
  unsigned int v1:31;
  double v2;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_D_BFu8ll) C1{ Fi:31 FL FL:8}



static void Test_BFu31i_D_BFu8ll()
{
  {
    init_simple_test("BFu31i_D_BFu8ll");
    static STRUCT_IF_C BFu31i_D_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu31i_D_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu31i_D_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_BFu8ll, BFu31i_D_BFu8ll)
//============================================================================


struct  BFu31i_D_BFu8s  {
  unsigned int v1:31;
  double v2;
  unsigned short v3:8;
};
//SIG(1 BFu31i_D_BFu8s) C1{ Fi:31 FL Fs:8}



static void Test_BFu31i_D_BFu8s()
{
  {
    init_simple_test("BFu31i_D_BFu8s");
    static STRUCT_IF_C BFu31i_D_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu31i_D_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu31i_D_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_BFu8s, BFu31i_D_BFu8s)
//============================================================================


struct  BFu31i_D_BFu9i  {
  unsigned int v1:31;
  double v2;
  unsigned int v3:9;
};
//SIG(1 BFu31i_D_BFu9i) C1{ Fi:31 FL Fi:9}



static void Test_BFu31i_D_BFu9i()
{
  {
    init_simple_test("BFu31i_D_BFu9i");
    static STRUCT_IF_C BFu31i_D_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu31i_D_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu31i_D_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_BFu9i, BFu31i_D_BFu9i)
//============================================================================


struct  BFu31i_D_BFu9ll  {
  unsigned int v1:31;
  double v2;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_D_BFu9ll) C1{ Fi:31 FL FL:9}



static void Test_BFu31i_D_BFu9ll()
{
  {
    init_simple_test("BFu31i_D_BFu9ll");
    static STRUCT_IF_C BFu31i_D_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu31i_D_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu31i_D_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_BFu9ll, BFu31i_D_BFu9ll)
//============================================================================


struct  BFu31i_D_BFu9s  {
  unsigned int v1:31;
  double v2;
  unsigned short v3:9;
};
//SIG(1 BFu31i_D_BFu9s) C1{ Fi:31 FL Fs:9}



static void Test_BFu31i_D_BFu9s()
{
  {
    init_simple_test("BFu31i_D_BFu9s");
    static STRUCT_IF_C BFu31i_D_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu31i_D_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu31i_D_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_BFu9s, BFu31i_D_BFu9s)
//============================================================================


struct  BFu31i_D_C  {
  unsigned int v1:31;
  double v2;
  char v3;
};
//SIG(1 BFu31i_D_C) C1{ Fi:31 FL Fc}



static void Test_BFu31i_D_C()
{
  {
    init_simple_test("BFu31i_D_C");
    static STRUCT_IF_C BFu31i_D_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_D_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_C, BFu31i_D_C)
//============================================================================


struct  BFu31i_D_D  {
  unsigned int v1:31;
  double v2;
  double v3;
};
//SIG(1 BFu31i_D_D) C1{ Fi:31 FL[2]}



static void Test_BFu31i_D_D()
{
  {
    init_simple_test("BFu31i_D_D");
    static STRUCT_IF_C BFu31i_D_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu31i_D_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_D_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_D, BFu31i_D_D)
//============================================================================


struct  BFu31i_D_F  {
  unsigned int v1:31;
  double v2;
  float v3;
};
//SIG(1 BFu31i_D_F) C1{ Fi:31 FL Fi}



static void Test_BFu31i_D_F()
{
  {
    init_simple_test("BFu31i_D_F");
    static STRUCT_IF_C BFu31i_D_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_D_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_F, BFu31i_D_F)
//============================================================================


struct  BFu31i_D_I  {
  unsigned int v1:31;
  double v2;
  int v3;
};
//SIG(1 BFu31i_D_I) C1{ Fi:31 FL Fi}



static void Test_BFu31i_D_I()
{
  {
    init_simple_test("BFu31i_D_I");
    static STRUCT_IF_C BFu31i_D_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_D_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_I, BFu31i_D_I)
//============================================================================


struct  BFu31i_D_Ip  {
  unsigned int v1:31;
  double v2;
  int *v3;
};
//SIG(1 BFu31i_D_Ip) C1{ Fi:31 FL Fp}



static void Test_BFu31i_D_Ip()
{
  {
    init_simple_test("BFu31i_D_Ip");
    static STRUCT_IF_C BFu31i_D_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_D_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_Ip, BFu31i_D_Ip)
//============================================================================


struct  BFu31i_D_L  {
  unsigned int v1:31;
  double v2;
  __tsi64 v3;
};
//SIG(1 BFu31i_D_L) C1{ Fi:31 FL[2]}



static void Test_BFu31i_D_L()
{
  {
    init_simple_test("BFu31i_D_L");
    static STRUCT_IF_C BFu31i_D_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu31i_D_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_D_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_L, BFu31i_D_L)
//============================================================================


struct  BFu31i_D_S  {
  unsigned int v1:31;
  double v2;
  short v3;
};
//SIG(1 BFu31i_D_S) C1{ Fi:31 FL Fs}



static void Test_BFu31i_D_S()
{
  {
    init_simple_test("BFu31i_D_S");
    static STRUCT_IF_C BFu31i_D_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_D_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_S, BFu31i_D_S)
//============================================================================


struct  BFu31i_D_Uc  {
  unsigned int v1:31;
  double v2;
  unsigned char v3;
};
//SIG(1 BFu31i_D_Uc) C1{ Fi:31 FL Fc}



static void Test_BFu31i_D_Uc()
{
  {
    init_simple_test("BFu31i_D_Uc");
    static STRUCT_IF_C BFu31i_D_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_D_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_Uc, BFu31i_D_Uc)
//============================================================================


struct  BFu31i_D_Ui  {
  unsigned int v1:31;
  double v2;
  unsigned int v3;
};
//SIG(1 BFu31i_D_Ui) C1{ Fi:31 FL Fi}



static void Test_BFu31i_D_Ui()
{
  {
    init_simple_test("BFu31i_D_Ui");
    static STRUCT_IF_C BFu31i_D_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_D_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_Ui, BFu31i_D_Ui)
//============================================================================


struct  BFu31i_D_Ul  {
  unsigned int v1:31;
  double v2;
  __tsu64 v3;
};
//SIG(1 BFu31i_D_Ul) C1{ Fi:31 FL[2]}



static void Test_BFu31i_D_Ul()
{
  {
    init_simple_test("BFu31i_D_Ul");
    static STRUCT_IF_C BFu31i_D_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu31i_D_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_D_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_Ul, BFu31i_D_Ul)
//============================================================================


struct  BFu31i_D_Us  {
  unsigned int v1:31;
  double v2;
  unsigned short v3;
};
//SIG(1 BFu31i_D_Us) C1{ Fi:31 FL Fs}



static void Test_BFu31i_D_Us()
{
  {
    init_simple_test("BFu31i_D_Us");
    static STRUCT_IF_C BFu31i_D_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_D_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_Us, BFu31i_D_Us)
//============================================================================


struct  BFu31i_D_Vp  {
  unsigned int v1:31;
  double v2;
  void *v3;
};
//SIG(1 BFu31i_D_Vp) C1{ Fi:31 FL Fp}



static void Test_BFu31i_D_Vp()
{
  {
    init_simple_test("BFu31i_D_Vp");
    static STRUCT_IF_C BFu31i_D_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_D_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_D_Vp, BFu31i_D_Vp)
//============================================================================


struct  BFu31i_F  {
  unsigned int v1:31;
  float v2;
};
//SIG(1 BFu31i_F) C1{ Fi:31 Fi}



static void Test_BFu31i_F()
{
  {
    init_simple_test("BFu31i_F");
    static STRUCT_IF_C BFu31i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F");
    check_field_offset(lv, v2, 4, "BFu31i_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F, BFu31i_F)
//============================================================================


struct  BFu31i_F_BFu15i  {
  unsigned int v1:31;
  float v2;
  unsigned int v3:15;
};
//SIG(1 BFu31i_F_BFu15i) C1{ Fi:31 Fi Fi:15}



static void Test_BFu31i_F_BFu15i()
{
  {
    init_simple_test("BFu31i_F_BFu15i");
    static STRUCT_IF_C BFu31i_F_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_F_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_F_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu15i");
    check_field_offset(lv, v2, 4, "BFu31i_F_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31i_F_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31i_F_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_BFu15i, BFu31i_F_BFu15i)
//============================================================================


struct  BFu31i_F_BFu15ll  {
  unsigned int v1:31;
  float v2;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_F_BFu15ll) C1{ Fi:31 Fi FL:15}



static void Test_BFu31i_F_BFu15ll()
{
  {
    init_simple_test("BFu31i_F_BFu15ll");
    static STRUCT_IF_C BFu31i_F_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_F_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_F_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu31i_F_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31i_F_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31i_F_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_BFu15ll, BFu31i_F_BFu15ll)
//============================================================================


struct  BFu31i_F_BFu15s  {
  unsigned int v1:31;
  float v2;
  unsigned short v3:15;
};
//SIG(1 BFu31i_F_BFu15s) C1{ Fi:31 Fi Fs:15}



static void Test_BFu31i_F_BFu15s()
{
  {
    init_simple_test("BFu31i_F_BFu15s");
    static STRUCT_IF_C BFu31i_F_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_F_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_F_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu15s");
    check_field_offset(lv, v2, 4, "BFu31i_F_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31i_F_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31i_F_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_BFu15s, BFu31i_F_BFu15s)
//============================================================================


struct  BFu31i_F_BFu16i  {
  unsigned int v1:31;
  float v2;
  unsigned int v3:16;
};
//SIG(1 BFu31i_F_BFu16i) C1{ Fi:31 Fi Fi:16}



static void Test_BFu31i_F_BFu16i()
{
  {
    init_simple_test("BFu31i_F_BFu16i");
    static STRUCT_IF_C BFu31i_F_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_F_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_F_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu16i");
    check_field_offset(lv, v2, 4, "BFu31i_F_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31i_F_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31i_F_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_BFu16i, BFu31i_F_BFu16i)
//============================================================================


struct  BFu31i_F_BFu16ll  {
  unsigned int v1:31;
  float v2;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_F_BFu16ll) C1{ Fi:31 Fi FL:16}



static void Test_BFu31i_F_BFu16ll()
{
  {
    init_simple_test("BFu31i_F_BFu16ll");
    static STRUCT_IF_C BFu31i_F_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_F_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_F_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu31i_F_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31i_F_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31i_F_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_BFu16ll, BFu31i_F_BFu16ll)
//============================================================================


struct  BFu31i_F_BFu16s  {
  unsigned int v1:31;
  float v2;
  unsigned short v3:16;
};
//SIG(1 BFu31i_F_BFu16s) C1{ Fi:31 Fi Fs:16}



static void Test_BFu31i_F_BFu16s()
{
  {
    init_simple_test("BFu31i_F_BFu16s");
    static STRUCT_IF_C BFu31i_F_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_F_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_F_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu16s");
    check_field_offset(lv, v2, 4, "BFu31i_F_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31i_F_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31i_F_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_BFu16s, BFu31i_F_BFu16s)
//============================================================================


struct  BFu31i_F_BFu17i  {
  unsigned int v1:31;
  float v2;
  unsigned int v3:17;
};
//SIG(1 BFu31i_F_BFu17i) C1{ Fi:31 Fi Fi:17}



static void Test_BFu31i_F_BFu17i()
{
  {
    init_simple_test("BFu31i_F_BFu17i");
    static STRUCT_IF_C BFu31i_F_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_F_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_F_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu17i");
    check_field_offset(lv, v2, 4, "BFu31i_F_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31i_F_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31i_F_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_BFu17i, BFu31i_F_BFu17i)
//============================================================================


struct  BFu31i_F_BFu17ll  {
  unsigned int v1:31;
  float v2;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_F_BFu17ll) C1{ Fi:31 Fi FL:17}



static void Test_BFu31i_F_BFu17ll()
{
  {
    init_simple_test("BFu31i_F_BFu17ll");
    static STRUCT_IF_C BFu31i_F_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_F_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_F_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu31i_F_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31i_F_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31i_F_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_BFu17ll, BFu31i_F_BFu17ll)
//============================================================================


struct  BFu31i_F_BFu1c  {
  unsigned int v1:31;
  float v2;
  unsigned char v3:1;
};
//SIG(1 BFu31i_F_BFu1c) C1{ Fi:31 Fi Fc:1}



static void Test_BFu31i_F_BFu1c()
{
  {
    init_simple_test("BFu31i_F_BFu1c");
    static STRUCT_IF_C BFu31i_F_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_F_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_F_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu1c");
    check_field_offset(lv, v2, 4, "BFu31i_F_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu31i_F_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_BFu1c, BFu31i_F_BFu1c)
//============================================================================


struct  BFu31i_F_BFu1i  {
  unsigned int v1:31;
  float v2;
  unsigned int v3:1;
};
//SIG(1 BFu31i_F_BFu1i) C1{ Fi:31 Fi Fi:1}



static void Test_BFu31i_F_BFu1i()
{
  {
    init_simple_test("BFu31i_F_BFu1i");
    static STRUCT_IF_C BFu31i_F_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_F_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_F_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu1i");
    check_field_offset(lv, v2, 4, "BFu31i_F_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu31i_F_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_BFu1i, BFu31i_F_BFu1i)
//============================================================================


struct  BFu31i_F_BFu1ll  {
  unsigned int v1:31;
  float v2;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_F_BFu1ll) C1{ Fi:31 Fi FL:1}



static void Test_BFu31i_F_BFu1ll()
{
  {
    init_simple_test("BFu31i_F_BFu1ll");
    static STRUCT_IF_C BFu31i_F_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_F_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_F_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu31i_F_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu31i_F_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_BFu1ll, BFu31i_F_BFu1ll)
//============================================================================


struct  BFu31i_F_BFu1s  {
  unsigned int v1:31;
  float v2;
  unsigned short v3:1;
};
//SIG(1 BFu31i_F_BFu1s) C1{ Fi:31 Fi Fs:1}



static void Test_BFu31i_F_BFu1s()
{
  {
    init_simple_test("BFu31i_F_BFu1s");
    static STRUCT_IF_C BFu31i_F_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_F_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_F_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu1s");
    check_field_offset(lv, v2, 4, "BFu31i_F_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu31i_F_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_BFu1s, BFu31i_F_BFu1s)
//============================================================================


struct  BFu31i_F_BFu31i  {
  unsigned int v1:31;
  float v2;
  unsigned int v3:31;
};
//SIG(1 BFu31i_F_BFu31i) C1{ Fi:31 Fi Fi:31}



static void Test_BFu31i_F_BFu31i()
{
  {
    init_simple_test("BFu31i_F_BFu31i");
    static STRUCT_IF_C BFu31i_F_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_F_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_F_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu31i");
    check_field_offset(lv, v2, 4, "BFu31i_F_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_F_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_BFu31i, BFu31i_F_BFu31i)
//============================================================================


struct  BFu31i_F_BFu31ll  {
  unsigned int v1:31;
  float v2;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_F_BFu31ll) C1{ Fi:31 Fi FL:31}



static void Test_BFu31i_F_BFu31ll()
{
  {
    init_simple_test("BFu31i_F_BFu31ll");
    static STRUCT_IF_C BFu31i_F_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_F_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_F_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu31i_F_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_F_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_BFu31ll, BFu31i_F_BFu31ll)
//============================================================================


struct  BFu31i_F_BFu32i  {
  unsigned int v1:31;
  float v2;
  unsigned int v3:32;
};
//SIG(1 BFu31i_F_BFu32i) C1{ Fi:31 Fi Fi:32}



static void Test_BFu31i_F_BFu32i()
{
  {
    init_simple_test("BFu31i_F_BFu32i");
    static STRUCT_IF_C BFu31i_F_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_F_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_F_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu32i");
    check_field_offset(lv, v2, 4, "BFu31i_F_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_F_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_F_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_BFu32i, BFu31i_F_BFu32i)
//============================================================================


struct  BFu31i_F_BFu32ll  {
  unsigned int v1:31;
  float v2;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_F_BFu32ll) C1{ Fi:31 Fi FL:32}



static void Test_BFu31i_F_BFu32ll()
{
  {
    init_simple_test("BFu31i_F_BFu32ll");
    static STRUCT_IF_C BFu31i_F_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_F_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_F_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu31i_F_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_F_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_F_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_BFu32ll, BFu31i_F_BFu32ll)
//============================================================================


struct  BFu31i_F_BFu33  {
  unsigned int v1:31;
  float v2;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_F_BFu33) C1{ Fi:31 Fi FL:33}



static void Test_BFu31i_F_BFu33()
{
  {
    init_simple_test("BFu31i_F_BFu33");
    static STRUCT_IF_C BFu31i_F_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_F_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_F_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu33");
    check_field_offset(lv, v2, 4, "BFu31i_F_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu31i_F_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu31i_F_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_BFu33, BFu31i_F_BFu33)
//============================================================================


struct  BFu31i_F_BFu7c  {
  unsigned int v1:31;
  float v2;
  unsigned char v3:7;
};
//SIG(1 BFu31i_F_BFu7c) C1{ Fi:31 Fi Fc:7}



static void Test_BFu31i_F_BFu7c()
{
  {
    init_simple_test("BFu31i_F_BFu7c");
    static STRUCT_IF_C BFu31i_F_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_F_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_F_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu7c");
    check_field_offset(lv, v2, 4, "BFu31i_F_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_F_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_F_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_BFu7c, BFu31i_F_BFu7c)
//============================================================================


struct  BFu31i_F_BFu7i  {
  unsigned int v1:31;
  float v2;
  unsigned int v3:7;
};
//SIG(1 BFu31i_F_BFu7i) C1{ Fi:31 Fi Fi:7}



static void Test_BFu31i_F_BFu7i()
{
  {
    init_simple_test("BFu31i_F_BFu7i");
    static STRUCT_IF_C BFu31i_F_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_F_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_F_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu7i");
    check_field_offset(lv, v2, 4, "BFu31i_F_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_F_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_F_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_BFu7i, BFu31i_F_BFu7i)
//============================================================================


struct  BFu31i_F_BFu7ll  {
  unsigned int v1:31;
  float v2;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_F_BFu7ll) C1{ Fi:31 Fi FL:7}



static void Test_BFu31i_F_BFu7ll()
{
  {
    init_simple_test("BFu31i_F_BFu7ll");
    static STRUCT_IF_C BFu31i_F_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_F_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_F_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu31i_F_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_F_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_F_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_BFu7ll, BFu31i_F_BFu7ll)
//============================================================================


struct  BFu31i_F_BFu7s  {
  unsigned int v1:31;
  float v2;
  unsigned short v3:7;
};
//SIG(1 BFu31i_F_BFu7s) C1{ Fi:31 Fi Fs:7}



static void Test_BFu31i_F_BFu7s()
{
  {
    init_simple_test("BFu31i_F_BFu7s");
    static STRUCT_IF_C BFu31i_F_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_F_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_F_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu7s");
    check_field_offset(lv, v2, 4, "BFu31i_F_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_F_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_F_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_BFu7s, BFu31i_F_BFu7s)
//============================================================================


struct  BFu31i_F_BFu8c  {
  unsigned int v1:31;
  float v2;
  unsigned char v3:8;
};
//SIG(1 BFu31i_F_BFu8c) C1{ Fi:31 Fi Fc:8}



static void Test_BFu31i_F_BFu8c()
{
  {
    init_simple_test("BFu31i_F_BFu8c");
    static STRUCT_IF_C BFu31i_F_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_F_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_F_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu8c");
    check_field_offset(lv, v2, 4, "BFu31i_F_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_F_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_F_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_BFu8c, BFu31i_F_BFu8c)
//============================================================================


struct  BFu31i_F_BFu8i  {
  unsigned int v1:31;
  float v2;
  unsigned int v3:8;
};
//SIG(1 BFu31i_F_BFu8i) C1{ Fi:31 Fi Fi:8}



static void Test_BFu31i_F_BFu8i()
{
  {
    init_simple_test("BFu31i_F_BFu8i");
    static STRUCT_IF_C BFu31i_F_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_F_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_F_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu8i");
    check_field_offset(lv, v2, 4, "BFu31i_F_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_F_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_F_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_BFu8i, BFu31i_F_BFu8i)
//============================================================================


struct  BFu31i_F_BFu8ll  {
  unsigned int v1:31;
  float v2;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_F_BFu8ll) C1{ Fi:31 Fi FL:8}



static void Test_BFu31i_F_BFu8ll()
{
  {
    init_simple_test("BFu31i_F_BFu8ll");
    static STRUCT_IF_C BFu31i_F_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_F_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_F_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu31i_F_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_F_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_F_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_BFu8ll, BFu31i_F_BFu8ll)
//============================================================================


struct  BFu31i_F_BFu8s  {
  unsigned int v1:31;
  float v2;
  unsigned short v3:8;
};
//SIG(1 BFu31i_F_BFu8s) C1{ Fi:31 Fi Fs:8}



static void Test_BFu31i_F_BFu8s()
{
  {
    init_simple_test("BFu31i_F_BFu8s");
    static STRUCT_IF_C BFu31i_F_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_F_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_F_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu8s");
    check_field_offset(lv, v2, 4, "BFu31i_F_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_F_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_F_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_BFu8s, BFu31i_F_BFu8s)
//============================================================================


struct  BFu31i_F_BFu9i  {
  unsigned int v1:31;
  float v2;
  unsigned int v3:9;
};
//SIG(1 BFu31i_F_BFu9i) C1{ Fi:31 Fi Fi:9}



static void Test_BFu31i_F_BFu9i()
{
  {
    init_simple_test("BFu31i_F_BFu9i");
    static STRUCT_IF_C BFu31i_F_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_F_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_F_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu9i");
    check_field_offset(lv, v2, 4, "BFu31i_F_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31i_F_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31i_F_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_BFu9i, BFu31i_F_BFu9i)
//============================================================================


struct  BFu31i_F_BFu9ll  {
  unsigned int v1:31;
  float v2;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_F_BFu9ll) C1{ Fi:31 Fi FL:9}



static void Test_BFu31i_F_BFu9ll()
{
  {
    init_simple_test("BFu31i_F_BFu9ll");
    static STRUCT_IF_C BFu31i_F_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_F_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_F_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu31i_F_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31i_F_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31i_F_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_BFu9ll, BFu31i_F_BFu9ll)
//============================================================================


struct  BFu31i_F_BFu9s  {
  unsigned int v1:31;
  float v2;
  unsigned short v3:9;
};
//SIG(1 BFu31i_F_BFu9s) C1{ Fi:31 Fi Fs:9}



static void Test_BFu31i_F_BFu9s()
{
  {
    init_simple_test("BFu31i_F_BFu9s");
    static STRUCT_IF_C BFu31i_F_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_F_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_F_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_BFu9s");
    check_field_offset(lv, v2, 4, "BFu31i_F_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31i_F_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31i_F_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_BFu9s, BFu31i_F_BFu9s)
//============================================================================


struct  BFu31i_F_C  {
  unsigned int v1:31;
  float v2;
  char v3;
};
//SIG(1 BFu31i_F_C) C1{ Fi:31 Fi Fc}



static void Test_BFu31i_F_C()
{
  {
    init_simple_test("BFu31i_F_C");
    static STRUCT_IF_C BFu31i_F_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_F_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_F_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_C");
    check_field_offset(lv, v2, 4, "BFu31i_F_C.v2");
    check_field_offset(lv, v3, 8, "BFu31i_F_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_C, BFu31i_F_C)
//============================================================================


struct  BFu31i_F_D  {
  unsigned int v1:31;
  float v2;
  double v3;
};
//SIG(1 BFu31i_F_D) C1{ Fi:31 Fi FL}



static void Test_BFu31i_F_D()
{
  {
    init_simple_test("BFu31i_F_D");
    static STRUCT_IF_C BFu31i_F_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_F_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_F_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_D");
    check_field_offset(lv, v2, 4, "BFu31i_F_D.v2");
    check_field_offset(lv, v3, 8, "BFu31i_F_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_D, BFu31i_F_D)
//============================================================================


struct  BFu31i_F_F  {
  unsigned int v1:31;
  float v2;
  float v3;
};
//SIG(1 BFu31i_F_F) C1{ Fi:31 Fi[2]}



static void Test_BFu31i_F_F()
{
  {
    init_simple_test("BFu31i_F_F");
    static STRUCT_IF_C BFu31i_F_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_F_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_F_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_F");
    check_field_offset(lv, v2, 4, "BFu31i_F_F.v2");
    check_field_offset(lv, v3, 8, "BFu31i_F_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_F, BFu31i_F_F)
//============================================================================


struct  BFu31i_F_I  {
  unsigned int v1:31;
  float v2;
  int v3;
};
//SIG(1 BFu31i_F_I) C1{ Fi:31 Fi[2]}



static void Test_BFu31i_F_I()
{
  {
    init_simple_test("BFu31i_F_I");
    static STRUCT_IF_C BFu31i_F_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_F_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_F_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_I");
    check_field_offset(lv, v2, 4, "BFu31i_F_I.v2");
    check_field_offset(lv, v3, 8, "BFu31i_F_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_I, BFu31i_F_I)
//============================================================================


struct  BFu31i_F_Ip  {
  unsigned int v1:31;
  float v2;
  int *v3;
};
//SIG(1 BFu31i_F_Ip) C1{ Fi:31 Fi Fp}



static void Test_BFu31i_F_Ip()
{
  {
    init_simple_test("BFu31i_F_Ip");
    static STRUCT_IF_C BFu31i_F_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_F_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_F_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_Ip");
    check_field_offset(lv, v2, 4, "BFu31i_F_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu31i_F_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_Ip, BFu31i_F_Ip)
//============================================================================


struct  BFu31i_F_L  {
  unsigned int v1:31;
  float v2;
  __tsi64 v3;
};
//SIG(1 BFu31i_F_L) C1{ Fi:31 Fi FL}



static void Test_BFu31i_F_L()
{
  {
    init_simple_test("BFu31i_F_L");
    static STRUCT_IF_C BFu31i_F_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_F_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_F_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_L");
    check_field_offset(lv, v2, 4, "BFu31i_F_L.v2");
    check_field_offset(lv, v3, 8, "BFu31i_F_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_L, BFu31i_F_L)
//============================================================================


struct  BFu31i_F_S  {
  unsigned int v1:31;
  float v2;
  short v3;
};
//SIG(1 BFu31i_F_S) C1{ Fi:31 Fi Fs}



static void Test_BFu31i_F_S()
{
  {
    init_simple_test("BFu31i_F_S");
    static STRUCT_IF_C BFu31i_F_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_F_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_F_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_S");
    check_field_offset(lv, v2, 4, "BFu31i_F_S.v2");
    check_field_offset(lv, v3, 8, "BFu31i_F_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_S, BFu31i_F_S)
//============================================================================


struct  BFu31i_F_Uc  {
  unsigned int v1:31;
  float v2;
  unsigned char v3;
};
//SIG(1 BFu31i_F_Uc) C1{ Fi:31 Fi Fc}



static void Test_BFu31i_F_Uc()
{
  {
    init_simple_test("BFu31i_F_Uc");
    static STRUCT_IF_C BFu31i_F_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_F_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_F_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_Uc");
    check_field_offset(lv, v2, 4, "BFu31i_F_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu31i_F_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_Uc, BFu31i_F_Uc)
//============================================================================


struct  BFu31i_F_Ui  {
  unsigned int v1:31;
  float v2;
  unsigned int v3;
};
//SIG(1 BFu31i_F_Ui) C1{ Fi:31 Fi[2]}



static void Test_BFu31i_F_Ui()
{
  {
    init_simple_test("BFu31i_F_Ui");
    static STRUCT_IF_C BFu31i_F_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_F_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_F_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_Ui");
    check_field_offset(lv, v2, 4, "BFu31i_F_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu31i_F_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_Ui, BFu31i_F_Ui)
//============================================================================


struct  BFu31i_F_Ul  {
  unsigned int v1:31;
  float v2;
  __tsu64 v3;
};
//SIG(1 BFu31i_F_Ul) C1{ Fi:31 Fi FL}



static void Test_BFu31i_F_Ul()
{
  {
    init_simple_test("BFu31i_F_Ul");
    static STRUCT_IF_C BFu31i_F_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_F_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_F_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_Ul");
    check_field_offset(lv, v2, 4, "BFu31i_F_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu31i_F_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_Ul, BFu31i_F_Ul)
//============================================================================


struct  BFu31i_F_Us  {
  unsigned int v1:31;
  float v2;
  unsigned short v3;
};
//SIG(1 BFu31i_F_Us) C1{ Fi:31 Fi Fs}



static void Test_BFu31i_F_Us()
{
  {
    init_simple_test("BFu31i_F_Us");
    static STRUCT_IF_C BFu31i_F_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_F_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_F_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_Us");
    check_field_offset(lv, v2, 4, "BFu31i_F_Us.v2");
    check_field_offset(lv, v3, 8, "BFu31i_F_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_Us, BFu31i_F_Us)
//============================================================================


struct  BFu31i_F_Vp  {
  unsigned int v1:31;
  float v2;
  void *v3;
};
//SIG(1 BFu31i_F_Vp) C1{ Fi:31 Fi Fp}



static void Test_BFu31i_F_Vp()
{
  {
    init_simple_test("BFu31i_F_Vp");
    static STRUCT_IF_C BFu31i_F_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_F_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_F_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_Vp");
    check_field_offset(lv, v2, 4, "BFu31i_F_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu31i_F_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_F_Vp, BFu31i_F_Vp)
//============================================================================


struct  BFu31i_I  {
  unsigned int v1:31;
  int v2;
};
//SIG(1 BFu31i_I) C1{ Fi:31 Fi}



static void Test_BFu31i_I()
{
  {
    init_simple_test("BFu31i_I");
    static STRUCT_IF_C BFu31i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I");
    check_field_offset(lv, v2, 4, "BFu31i_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I, BFu31i_I)
//============================================================================


struct  BFu31i_I_BFu15i  {
  unsigned int v1:31;
  int v2;
  unsigned int v3:15;
};
//SIG(1 BFu31i_I_BFu15i) C1{ Fi:31 Fi Fi:15}



static void Test_BFu31i_I_BFu15i()
{
  {
    init_simple_test("BFu31i_I_BFu15i");
    static STRUCT_IF_C BFu31i_I_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_I_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_I_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu15i");
    check_field_offset(lv, v2, 4, "BFu31i_I_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31i_I_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31i_I_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_BFu15i, BFu31i_I_BFu15i)
//============================================================================


struct  BFu31i_I_BFu15ll  {
  unsigned int v1:31;
  int v2;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_I_BFu15ll) C1{ Fi:31 Fi FL:15}



static void Test_BFu31i_I_BFu15ll()
{
  {
    init_simple_test("BFu31i_I_BFu15ll");
    static STRUCT_IF_C BFu31i_I_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_I_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_I_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu31i_I_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31i_I_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31i_I_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_BFu15ll, BFu31i_I_BFu15ll)
//============================================================================


struct  BFu31i_I_BFu15s  {
  unsigned int v1:31;
  int v2;
  unsigned short v3:15;
};
//SIG(1 BFu31i_I_BFu15s) C1{ Fi:31 Fi Fs:15}



static void Test_BFu31i_I_BFu15s()
{
  {
    init_simple_test("BFu31i_I_BFu15s");
    static STRUCT_IF_C BFu31i_I_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_I_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_I_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu15s");
    check_field_offset(lv, v2, 4, "BFu31i_I_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31i_I_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31i_I_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_BFu15s, BFu31i_I_BFu15s)
//============================================================================


struct  BFu31i_I_BFu16i  {
  unsigned int v1:31;
  int v2;
  unsigned int v3:16;
};
//SIG(1 BFu31i_I_BFu16i) C1{ Fi:31 Fi Fi:16}



static void Test_BFu31i_I_BFu16i()
{
  {
    init_simple_test("BFu31i_I_BFu16i");
    static STRUCT_IF_C BFu31i_I_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_I_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_I_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu16i");
    check_field_offset(lv, v2, 4, "BFu31i_I_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31i_I_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31i_I_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_BFu16i, BFu31i_I_BFu16i)
//============================================================================


struct  BFu31i_I_BFu16ll  {
  unsigned int v1:31;
  int v2;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_I_BFu16ll) C1{ Fi:31 Fi FL:16}



static void Test_BFu31i_I_BFu16ll()
{
  {
    init_simple_test("BFu31i_I_BFu16ll");
    static STRUCT_IF_C BFu31i_I_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_I_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_I_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu31i_I_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31i_I_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31i_I_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_BFu16ll, BFu31i_I_BFu16ll)
//============================================================================


struct  BFu31i_I_BFu16s  {
  unsigned int v1:31;
  int v2;
  unsigned short v3:16;
};
//SIG(1 BFu31i_I_BFu16s) C1{ Fi:31 Fi Fs:16}



static void Test_BFu31i_I_BFu16s()
{
  {
    init_simple_test("BFu31i_I_BFu16s");
    static STRUCT_IF_C BFu31i_I_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_I_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_I_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu16s");
    check_field_offset(lv, v2, 4, "BFu31i_I_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31i_I_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31i_I_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_BFu16s, BFu31i_I_BFu16s)
//============================================================================


struct  BFu31i_I_BFu17i  {
  unsigned int v1:31;
  int v2;
  unsigned int v3:17;
};
//SIG(1 BFu31i_I_BFu17i) C1{ Fi:31 Fi Fi:17}



static void Test_BFu31i_I_BFu17i()
{
  {
    init_simple_test("BFu31i_I_BFu17i");
    static STRUCT_IF_C BFu31i_I_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_I_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_I_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu17i");
    check_field_offset(lv, v2, 4, "BFu31i_I_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31i_I_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31i_I_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_BFu17i, BFu31i_I_BFu17i)
//============================================================================


struct  BFu31i_I_BFu17ll  {
  unsigned int v1:31;
  int v2;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_I_BFu17ll) C1{ Fi:31 Fi FL:17}



static void Test_BFu31i_I_BFu17ll()
{
  {
    init_simple_test("BFu31i_I_BFu17ll");
    static STRUCT_IF_C BFu31i_I_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_I_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_I_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu31i_I_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31i_I_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31i_I_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_BFu17ll, BFu31i_I_BFu17ll)
//============================================================================


struct  BFu31i_I_BFu1c  {
  unsigned int v1:31;
  int v2;
  unsigned char v3:1;
};
//SIG(1 BFu31i_I_BFu1c) C1{ Fi:31 Fi Fc:1}



static void Test_BFu31i_I_BFu1c()
{
  {
    init_simple_test("BFu31i_I_BFu1c");
    static STRUCT_IF_C BFu31i_I_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_I_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_I_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu1c");
    check_field_offset(lv, v2, 4, "BFu31i_I_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu31i_I_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_BFu1c, BFu31i_I_BFu1c)
//============================================================================


struct  BFu31i_I_BFu1i  {
  unsigned int v1:31;
  int v2;
  unsigned int v3:1;
};
//SIG(1 BFu31i_I_BFu1i) C1{ Fi:31 Fi Fi:1}



static void Test_BFu31i_I_BFu1i()
{
  {
    init_simple_test("BFu31i_I_BFu1i");
    static STRUCT_IF_C BFu31i_I_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_I_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_I_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu1i");
    check_field_offset(lv, v2, 4, "BFu31i_I_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu31i_I_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_BFu1i, BFu31i_I_BFu1i)
//============================================================================


struct  BFu31i_I_BFu1ll  {
  unsigned int v1:31;
  int v2;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_I_BFu1ll) C1{ Fi:31 Fi FL:1}



static void Test_BFu31i_I_BFu1ll()
{
  {
    init_simple_test("BFu31i_I_BFu1ll");
    static STRUCT_IF_C BFu31i_I_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_I_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_I_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu31i_I_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu31i_I_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_BFu1ll, BFu31i_I_BFu1ll)
//============================================================================


struct  BFu31i_I_BFu1s  {
  unsigned int v1:31;
  int v2;
  unsigned short v3:1;
};
//SIG(1 BFu31i_I_BFu1s) C1{ Fi:31 Fi Fs:1}



static void Test_BFu31i_I_BFu1s()
{
  {
    init_simple_test("BFu31i_I_BFu1s");
    static STRUCT_IF_C BFu31i_I_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_I_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_I_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu1s");
    check_field_offset(lv, v2, 4, "BFu31i_I_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu31i_I_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_BFu1s, BFu31i_I_BFu1s)
//============================================================================


struct  BFu31i_I_BFu31i  {
  unsigned int v1:31;
  int v2;
  unsigned int v3:31;
};
//SIG(1 BFu31i_I_BFu31i) C1{ Fi:31 Fi Fi:31}



static void Test_BFu31i_I_BFu31i()
{
  {
    init_simple_test("BFu31i_I_BFu31i");
    static STRUCT_IF_C BFu31i_I_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_I_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_I_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu31i");
    check_field_offset(lv, v2, 4, "BFu31i_I_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_I_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_BFu31i, BFu31i_I_BFu31i)
//============================================================================


struct  BFu31i_I_BFu31ll  {
  unsigned int v1:31;
  int v2;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_I_BFu31ll) C1{ Fi:31 Fi FL:31}



static void Test_BFu31i_I_BFu31ll()
{
  {
    init_simple_test("BFu31i_I_BFu31ll");
    static STRUCT_IF_C BFu31i_I_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_I_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_I_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu31i_I_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_I_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_BFu31ll, BFu31i_I_BFu31ll)
//============================================================================


struct  BFu31i_I_BFu32i  {
  unsigned int v1:31;
  int v2;
  unsigned int v3:32;
};
//SIG(1 BFu31i_I_BFu32i) C1{ Fi:31 Fi Fi:32}



static void Test_BFu31i_I_BFu32i()
{
  {
    init_simple_test("BFu31i_I_BFu32i");
    static STRUCT_IF_C BFu31i_I_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_I_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_I_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu32i");
    check_field_offset(lv, v2, 4, "BFu31i_I_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_I_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_I_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_BFu32i, BFu31i_I_BFu32i)
//============================================================================


struct  BFu31i_I_BFu32ll  {
  unsigned int v1:31;
  int v2;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_I_BFu32ll) C1{ Fi:31 Fi FL:32}



static void Test_BFu31i_I_BFu32ll()
{
  {
    init_simple_test("BFu31i_I_BFu32ll");
    static STRUCT_IF_C BFu31i_I_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_I_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_I_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu31i_I_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_I_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_I_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_BFu32ll, BFu31i_I_BFu32ll)
//============================================================================


struct  BFu31i_I_BFu33  {
  unsigned int v1:31;
  int v2;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_I_BFu33) C1{ Fi:31 Fi FL:33}



static void Test_BFu31i_I_BFu33()
{
  {
    init_simple_test("BFu31i_I_BFu33");
    static STRUCT_IF_C BFu31i_I_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_I_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_I_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu33");
    check_field_offset(lv, v2, 4, "BFu31i_I_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu31i_I_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu31i_I_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_BFu33, BFu31i_I_BFu33)
//============================================================================


struct  BFu31i_I_BFu7c  {
  unsigned int v1:31;
  int v2;
  unsigned char v3:7;
};
//SIG(1 BFu31i_I_BFu7c) C1{ Fi:31 Fi Fc:7}



static void Test_BFu31i_I_BFu7c()
{
  {
    init_simple_test("BFu31i_I_BFu7c");
    static STRUCT_IF_C BFu31i_I_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_I_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_I_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu7c");
    check_field_offset(lv, v2, 4, "BFu31i_I_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_I_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_I_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_BFu7c, BFu31i_I_BFu7c)
//============================================================================


struct  BFu31i_I_BFu7i  {
  unsigned int v1:31;
  int v2;
  unsigned int v3:7;
};
//SIG(1 BFu31i_I_BFu7i) C1{ Fi:31 Fi Fi:7}



static void Test_BFu31i_I_BFu7i()
{
  {
    init_simple_test("BFu31i_I_BFu7i");
    static STRUCT_IF_C BFu31i_I_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_I_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_I_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu7i");
    check_field_offset(lv, v2, 4, "BFu31i_I_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_I_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_I_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_BFu7i, BFu31i_I_BFu7i)
//============================================================================


struct  BFu31i_I_BFu7ll  {
  unsigned int v1:31;
  int v2;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_I_BFu7ll) C1{ Fi:31 Fi FL:7}



static void Test_BFu31i_I_BFu7ll()
{
  {
    init_simple_test("BFu31i_I_BFu7ll");
    static STRUCT_IF_C BFu31i_I_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_I_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_I_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu31i_I_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_I_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_I_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_BFu7ll, BFu31i_I_BFu7ll)
//============================================================================


struct  BFu31i_I_BFu7s  {
  unsigned int v1:31;
  int v2;
  unsigned short v3:7;
};
//SIG(1 BFu31i_I_BFu7s) C1{ Fi:31 Fi Fs:7}



static void Test_BFu31i_I_BFu7s()
{
  {
    init_simple_test("BFu31i_I_BFu7s");
    static STRUCT_IF_C BFu31i_I_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_I_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_I_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu7s");
    check_field_offset(lv, v2, 4, "BFu31i_I_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_I_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_I_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_BFu7s, BFu31i_I_BFu7s)
//============================================================================


struct  BFu31i_I_BFu8c  {
  unsigned int v1:31;
  int v2;
  unsigned char v3:8;
};
//SIG(1 BFu31i_I_BFu8c) C1{ Fi:31 Fi Fc:8}



static void Test_BFu31i_I_BFu8c()
{
  {
    init_simple_test("BFu31i_I_BFu8c");
    static STRUCT_IF_C BFu31i_I_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_I_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_I_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu8c");
    check_field_offset(lv, v2, 4, "BFu31i_I_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_I_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_I_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_BFu8c, BFu31i_I_BFu8c)
//============================================================================


struct  BFu31i_I_BFu8i  {
  unsigned int v1:31;
  int v2;
  unsigned int v3:8;
};
//SIG(1 BFu31i_I_BFu8i) C1{ Fi:31 Fi Fi:8}



static void Test_BFu31i_I_BFu8i()
{
  {
    init_simple_test("BFu31i_I_BFu8i");
    static STRUCT_IF_C BFu31i_I_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_I_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_I_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu8i");
    check_field_offset(lv, v2, 4, "BFu31i_I_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_I_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_I_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_BFu8i, BFu31i_I_BFu8i)
//============================================================================


struct  BFu31i_I_BFu8ll  {
  unsigned int v1:31;
  int v2;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_I_BFu8ll) C1{ Fi:31 Fi FL:8}



static void Test_BFu31i_I_BFu8ll()
{
  {
    init_simple_test("BFu31i_I_BFu8ll");
    static STRUCT_IF_C BFu31i_I_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_I_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_I_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu31i_I_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_I_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_I_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_BFu8ll, BFu31i_I_BFu8ll)
//============================================================================


struct  BFu31i_I_BFu8s  {
  unsigned int v1:31;
  int v2;
  unsigned short v3:8;
};
//SIG(1 BFu31i_I_BFu8s) C1{ Fi:31 Fi Fs:8}



static void Test_BFu31i_I_BFu8s()
{
  {
    init_simple_test("BFu31i_I_BFu8s");
    static STRUCT_IF_C BFu31i_I_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_I_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_I_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu8s");
    check_field_offset(lv, v2, 4, "BFu31i_I_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_I_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_I_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_BFu8s, BFu31i_I_BFu8s)
//============================================================================


struct  BFu31i_I_BFu9i  {
  unsigned int v1:31;
  int v2;
  unsigned int v3:9;
};
//SIG(1 BFu31i_I_BFu9i) C1{ Fi:31 Fi Fi:9}



static void Test_BFu31i_I_BFu9i()
{
  {
    init_simple_test("BFu31i_I_BFu9i");
    static STRUCT_IF_C BFu31i_I_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_I_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_I_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu9i");
    check_field_offset(lv, v2, 4, "BFu31i_I_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31i_I_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31i_I_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_BFu9i, BFu31i_I_BFu9i)
//============================================================================


struct  BFu31i_I_BFu9ll  {
  unsigned int v1:31;
  int v2;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_I_BFu9ll) C1{ Fi:31 Fi FL:9}



static void Test_BFu31i_I_BFu9ll()
{
  {
    init_simple_test("BFu31i_I_BFu9ll");
    static STRUCT_IF_C BFu31i_I_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_I_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_I_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu31i_I_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31i_I_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31i_I_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_BFu9ll, BFu31i_I_BFu9ll)
//============================================================================


struct  BFu31i_I_BFu9s  {
  unsigned int v1:31;
  int v2;
  unsigned short v3:9;
};
//SIG(1 BFu31i_I_BFu9s) C1{ Fi:31 Fi Fs:9}



static void Test_BFu31i_I_BFu9s()
{
  {
    init_simple_test("BFu31i_I_BFu9s");
    static STRUCT_IF_C BFu31i_I_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_I_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_I_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_BFu9s");
    check_field_offset(lv, v2, 4, "BFu31i_I_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31i_I_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31i_I_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_BFu9s, BFu31i_I_BFu9s)
//============================================================================


struct  BFu31i_I_C  {
  unsigned int v1:31;
  int v2;
  char v3;
};
//SIG(1 BFu31i_I_C) C1{ Fi:31 Fi Fc}



static void Test_BFu31i_I_C()
{
  {
    init_simple_test("BFu31i_I_C");
    static STRUCT_IF_C BFu31i_I_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_I_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_I_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_C");
    check_field_offset(lv, v2, 4, "BFu31i_I_C.v2");
    check_field_offset(lv, v3, 8, "BFu31i_I_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_C, BFu31i_I_C)
//============================================================================


struct  BFu31i_I_D  {
  unsigned int v1:31;
  int v2;
  double v3;
};
//SIG(1 BFu31i_I_D) C1{ Fi:31 Fi FL}



static void Test_BFu31i_I_D()
{
  {
    init_simple_test("BFu31i_I_D");
    static STRUCT_IF_C BFu31i_I_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_I_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_I_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_D");
    check_field_offset(lv, v2, 4, "BFu31i_I_D.v2");
    check_field_offset(lv, v3, 8, "BFu31i_I_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_D, BFu31i_I_D)
//============================================================================


struct  BFu31i_I_F  {
  unsigned int v1:31;
  int v2;
  float v3;
};
//SIG(1 BFu31i_I_F) C1{ Fi:31 Fi[2]}



static void Test_BFu31i_I_F()
{
  {
    init_simple_test("BFu31i_I_F");
    static STRUCT_IF_C BFu31i_I_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_I_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_I_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_F");
    check_field_offset(lv, v2, 4, "BFu31i_I_F.v2");
    check_field_offset(lv, v3, 8, "BFu31i_I_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_F, BFu31i_I_F)
//============================================================================


struct  BFu31i_I_I  {
  unsigned int v1:31;
  int v2;
  int v3;
};
//SIG(1 BFu31i_I_I) C1{ Fi:31 Fi[2]}



static void Test_BFu31i_I_I()
{
  {
    init_simple_test("BFu31i_I_I");
    static STRUCT_IF_C BFu31i_I_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_I_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_I_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_I");
    check_field_offset(lv, v2, 4, "BFu31i_I_I.v2");
    check_field_offset(lv, v3, 8, "BFu31i_I_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_I, BFu31i_I_I)
//============================================================================


struct  BFu31i_I_Ip  {
  unsigned int v1:31;
  int v2;
  int *v3;
};
//SIG(1 BFu31i_I_Ip) C1{ Fi:31 Fi Fp}



static void Test_BFu31i_I_Ip()
{
  {
    init_simple_test("BFu31i_I_Ip");
    static STRUCT_IF_C BFu31i_I_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_I_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_I_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_Ip");
    check_field_offset(lv, v2, 4, "BFu31i_I_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu31i_I_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_Ip, BFu31i_I_Ip)
//============================================================================


struct  BFu31i_I_L  {
  unsigned int v1:31;
  int v2;
  __tsi64 v3;
};
//SIG(1 BFu31i_I_L) C1{ Fi:31 Fi FL}



static void Test_BFu31i_I_L()
{
  {
    init_simple_test("BFu31i_I_L");
    static STRUCT_IF_C BFu31i_I_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_I_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_I_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_L");
    check_field_offset(lv, v2, 4, "BFu31i_I_L.v2");
    check_field_offset(lv, v3, 8, "BFu31i_I_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_L, BFu31i_I_L)
//============================================================================


struct  BFu31i_I_S  {
  unsigned int v1:31;
  int v2;
  short v3;
};
//SIG(1 BFu31i_I_S) C1{ Fi:31 Fi Fs}



static void Test_BFu31i_I_S()
{
  {
    init_simple_test("BFu31i_I_S");
    static STRUCT_IF_C BFu31i_I_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_I_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_I_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_S");
    check_field_offset(lv, v2, 4, "BFu31i_I_S.v2");
    check_field_offset(lv, v3, 8, "BFu31i_I_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_S, BFu31i_I_S)
//============================================================================


struct  BFu31i_I_Uc  {
  unsigned int v1:31;
  int v2;
  unsigned char v3;
};
//SIG(1 BFu31i_I_Uc) C1{ Fi:31 Fi Fc}



static void Test_BFu31i_I_Uc()
{
  {
    init_simple_test("BFu31i_I_Uc");
    static STRUCT_IF_C BFu31i_I_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_I_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_I_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_Uc");
    check_field_offset(lv, v2, 4, "BFu31i_I_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu31i_I_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_Uc, BFu31i_I_Uc)
//============================================================================


struct  BFu31i_I_Ui  {
  unsigned int v1:31;
  int v2;
  unsigned int v3;
};
//SIG(1 BFu31i_I_Ui) C1{ Fi:31 Fi[2]}



static void Test_BFu31i_I_Ui()
{
  {
    init_simple_test("BFu31i_I_Ui");
    static STRUCT_IF_C BFu31i_I_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_I_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_I_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_Ui");
    check_field_offset(lv, v2, 4, "BFu31i_I_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu31i_I_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_Ui, BFu31i_I_Ui)
//============================================================================


struct  BFu31i_I_Ul  {
  unsigned int v1:31;
  int v2;
  __tsu64 v3;
};
//SIG(1 BFu31i_I_Ul) C1{ Fi:31 Fi FL}



static void Test_BFu31i_I_Ul()
{
  {
    init_simple_test("BFu31i_I_Ul");
    static STRUCT_IF_C BFu31i_I_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_I_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_I_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_Ul");
    check_field_offset(lv, v2, 4, "BFu31i_I_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu31i_I_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_Ul, BFu31i_I_Ul)
//============================================================================


struct  BFu31i_I_Us  {
  unsigned int v1:31;
  int v2;
  unsigned short v3;
};
//SIG(1 BFu31i_I_Us) C1{ Fi:31 Fi Fs}



static void Test_BFu31i_I_Us()
{
  {
    init_simple_test("BFu31i_I_Us");
    static STRUCT_IF_C BFu31i_I_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_I_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_I_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_Us");
    check_field_offset(lv, v2, 4, "BFu31i_I_Us.v2");
    check_field_offset(lv, v3, 8, "BFu31i_I_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_Us, BFu31i_I_Us)
//============================================================================


struct  BFu31i_I_Vp  {
  unsigned int v1:31;
  int v2;
  void *v3;
};
//SIG(1 BFu31i_I_Vp) C1{ Fi:31 Fi Fp}



static void Test_BFu31i_I_Vp()
{
  {
    init_simple_test("BFu31i_I_Vp");
    static STRUCT_IF_C BFu31i_I_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_I_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_I_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_Vp");
    check_field_offset(lv, v2, 4, "BFu31i_I_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu31i_I_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_I_Vp, BFu31i_I_Vp)
//============================================================================


struct  BFu31i_Ip  {
  unsigned int v1:31;
  int *v2;
};
//SIG(1 BFu31i_Ip) C1{ Fi:31 Fp}



static void Test_BFu31i_Ip()
{
  {
    init_simple_test("BFu31i_Ip");
    static STRUCT_IF_C BFu31i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu31i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip, BFu31i_Ip)
//============================================================================


struct  BFu31i_Ip_BFu15i  {
  unsigned int v1:31;
  int *v2;
  unsigned int v3:15;
};
//SIG(1 BFu31i_Ip_BFu15i) C1{ Fi:31 Fp Fi:15}



static void Test_BFu31i_Ip_BFu15i()
{
  {
    init_simple_test("BFu31i_Ip_BFu15i");
    static STRUCT_IF_C BFu31i_Ip_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu31i_Ip_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu31i_Ip_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_BFu15i, BFu31i_Ip_BFu15i)
//============================================================================


struct  BFu31i_Ip_BFu15ll  {
  unsigned int v1:31;
  int *v2;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_Ip_BFu15ll) C1{ Fi:31 Fp FL:15}



static void Test_BFu31i_Ip_BFu15ll()
{
  {
    init_simple_test("BFu31i_Ip_BFu15ll");
    static STRUCT_IF_C BFu31i_Ip_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu31i_Ip_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu31i_Ip_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_BFu15ll, BFu31i_Ip_BFu15ll)
//============================================================================


struct  BFu31i_Ip_BFu15s  {
  unsigned int v1:31;
  int *v2;
  unsigned short v3:15;
};
//SIG(1 BFu31i_Ip_BFu15s) C1{ Fi:31 Fp Fs:15}



static void Test_BFu31i_Ip_BFu15s()
{
  {
    init_simple_test("BFu31i_Ip_BFu15s");
    static STRUCT_IF_C BFu31i_Ip_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu31i_Ip_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu31i_Ip_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_BFu15s, BFu31i_Ip_BFu15s)
//============================================================================


struct  BFu31i_Ip_BFu16i  {
  unsigned int v1:31;
  int *v2;
  unsigned int v3:16;
};
//SIG(1 BFu31i_Ip_BFu16i) C1{ Fi:31 Fp Fi:16}



static void Test_BFu31i_Ip_BFu16i()
{
  {
    init_simple_test("BFu31i_Ip_BFu16i");
    static STRUCT_IF_C BFu31i_Ip_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu31i_Ip_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu31i_Ip_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_BFu16i, BFu31i_Ip_BFu16i)
//============================================================================


struct  BFu31i_Ip_BFu16ll  {
  unsigned int v1:31;
  int *v2;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_Ip_BFu16ll) C1{ Fi:31 Fp FL:16}



static void Test_BFu31i_Ip_BFu16ll()
{
  {
    init_simple_test("BFu31i_Ip_BFu16ll");
    static STRUCT_IF_C BFu31i_Ip_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu31i_Ip_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu31i_Ip_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_BFu16ll, BFu31i_Ip_BFu16ll)
//============================================================================


struct  BFu31i_Ip_BFu16s  {
  unsigned int v1:31;
  int *v2;
  unsigned short v3:16;
};
//SIG(1 BFu31i_Ip_BFu16s) C1{ Fi:31 Fp Fs:16}



static void Test_BFu31i_Ip_BFu16s()
{
  {
    init_simple_test("BFu31i_Ip_BFu16s");
    static STRUCT_IF_C BFu31i_Ip_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu31i_Ip_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu31i_Ip_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_BFu16s, BFu31i_Ip_BFu16s)
//============================================================================


struct  BFu31i_Ip_BFu17i  {
  unsigned int v1:31;
  int *v2;
  unsigned int v3:17;
};
//SIG(1 BFu31i_Ip_BFu17i) C1{ Fi:31 Fp Fi:17}



static void Test_BFu31i_Ip_BFu17i()
{
  {
    init_simple_test("BFu31i_Ip_BFu17i");
    static STRUCT_IF_C BFu31i_Ip_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu31i_Ip_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu31i_Ip_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_BFu17i, BFu31i_Ip_BFu17i)
//============================================================================


struct  BFu31i_Ip_BFu17ll  {
  unsigned int v1:31;
  int *v2;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_Ip_BFu17ll) C1{ Fi:31 Fp FL:17}



static void Test_BFu31i_Ip_BFu17ll()
{
  {
    init_simple_test("BFu31i_Ip_BFu17ll");
    static STRUCT_IF_C BFu31i_Ip_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu31i_Ip_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu31i_Ip_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_BFu17ll, BFu31i_Ip_BFu17ll)
//============================================================================


struct  BFu31i_Ip_BFu1c  {
  unsigned int v1:31;
  int *v2;
  unsigned char v3:1;
};
//SIG(1 BFu31i_Ip_BFu1c) C1{ Fi:31 Fp Fc:1}



static void Test_BFu31i_Ip_BFu1c()
{
  {
    init_simple_test("BFu31i_Ip_BFu1c");
    static STRUCT_IF_C BFu31i_Ip_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu31i_Ip_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_BFu1c, BFu31i_Ip_BFu1c)
//============================================================================


struct  BFu31i_Ip_BFu1i  {
  unsigned int v1:31;
  int *v2;
  unsigned int v3:1;
};
//SIG(1 BFu31i_Ip_BFu1i) C1{ Fi:31 Fp Fi:1}



static void Test_BFu31i_Ip_BFu1i()
{
  {
    init_simple_test("BFu31i_Ip_BFu1i");
    static STRUCT_IF_C BFu31i_Ip_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu31i_Ip_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_BFu1i, BFu31i_Ip_BFu1i)
//============================================================================


struct  BFu31i_Ip_BFu1ll  {
  unsigned int v1:31;
  int *v2;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_Ip_BFu1ll) C1{ Fi:31 Fp FL:1}



static void Test_BFu31i_Ip_BFu1ll()
{
  {
    init_simple_test("BFu31i_Ip_BFu1ll");
    static STRUCT_IF_C BFu31i_Ip_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu31i_Ip_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_BFu1ll, BFu31i_Ip_BFu1ll)
//============================================================================


struct  BFu31i_Ip_BFu1s  {
  unsigned int v1:31;
  int *v2;
  unsigned short v3:1;
};
//SIG(1 BFu31i_Ip_BFu1s) C1{ Fi:31 Fp Fs:1}



static void Test_BFu31i_Ip_BFu1s()
{
  {
    init_simple_test("BFu31i_Ip_BFu1s");
    static STRUCT_IF_C BFu31i_Ip_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu31i_Ip_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_BFu1s, BFu31i_Ip_BFu1s)
//============================================================================


struct  BFu31i_Ip_BFu31i  {
  unsigned int v1:31;
  int *v2;
  unsigned int v3:31;
};
//SIG(1 BFu31i_Ip_BFu31i) C1{ Fi:31 Fp Fi:31}



static void Test_BFu31i_Ip_BFu31i()
{
  {
    init_simple_test("BFu31i_Ip_BFu31i");
    static STRUCT_IF_C BFu31i_Ip_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu31i_Ip_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_BFu31i, BFu31i_Ip_BFu31i)
//============================================================================


struct  BFu31i_Ip_BFu31ll  {
  unsigned int v1:31;
  int *v2;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_Ip_BFu31ll) C1{ Fi:31 Fp FL:31}



static void Test_BFu31i_Ip_BFu31ll()
{
  {
    init_simple_test("BFu31i_Ip_BFu31ll");
    static STRUCT_IF_C BFu31i_Ip_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu31i_Ip_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_BFu31ll, BFu31i_Ip_BFu31ll)
//============================================================================


struct  BFu31i_Ip_BFu32i  {
  unsigned int v1:31;
  int *v2;
  unsigned int v3:32;
};
//SIG(1 BFu31i_Ip_BFu32i) C1{ Fi:31 Fp Fi:32}



static void Test_BFu31i_Ip_BFu32i()
{
  {
    init_simple_test("BFu31i_Ip_BFu32i");
    static STRUCT_IF_C BFu31i_Ip_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu31i_Ip_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu31i_Ip_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_BFu32i, BFu31i_Ip_BFu32i)
//============================================================================


struct  BFu31i_Ip_BFu32ll  {
  unsigned int v1:31;
  int *v2;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_Ip_BFu32ll) C1{ Fi:31 Fp FL:32}



static void Test_BFu31i_Ip_BFu32ll()
{
  {
    init_simple_test("BFu31i_Ip_BFu32ll");
    static STRUCT_IF_C BFu31i_Ip_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu31i_Ip_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu31i_Ip_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_BFu32ll, BFu31i_Ip_BFu32ll)
//============================================================================


struct  BFu31i_Ip_BFu33  {
  unsigned int v1:31;
  int *v2;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_Ip_BFu33) C1{ Fi:31 Fp FL:33}



static void Test_BFu31i_Ip_BFu33()
{
  {
    init_simple_test("BFu31i_Ip_BFu33");
    static STRUCT_IF_C BFu31i_Ip_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ip_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "BFu31i_Ip_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "BFu31i_Ip_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_BFu33, BFu31i_Ip_BFu33)
//============================================================================


struct  BFu31i_Ip_BFu7c  {
  unsigned int v1:31;
  int *v2;
  unsigned char v3:7;
};
//SIG(1 BFu31i_Ip_BFu7c) C1{ Fi:31 Fp Fc:7}



static void Test_BFu31i_Ip_BFu7c()
{
  {
    init_simple_test("BFu31i_Ip_BFu7c");
    static STRUCT_IF_C BFu31i_Ip_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu31i_Ip_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu31i_Ip_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_BFu7c, BFu31i_Ip_BFu7c)
//============================================================================


struct  BFu31i_Ip_BFu7i  {
  unsigned int v1:31;
  int *v2;
  unsigned int v3:7;
};
//SIG(1 BFu31i_Ip_BFu7i) C1{ Fi:31 Fp Fi:7}



static void Test_BFu31i_Ip_BFu7i()
{
  {
    init_simple_test("BFu31i_Ip_BFu7i");
    static STRUCT_IF_C BFu31i_Ip_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu31i_Ip_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu31i_Ip_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_BFu7i, BFu31i_Ip_BFu7i)
//============================================================================


struct  BFu31i_Ip_BFu7ll  {
  unsigned int v1:31;
  int *v2;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_Ip_BFu7ll) C1{ Fi:31 Fp FL:7}



static void Test_BFu31i_Ip_BFu7ll()
{
  {
    init_simple_test("BFu31i_Ip_BFu7ll");
    static STRUCT_IF_C BFu31i_Ip_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu31i_Ip_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu31i_Ip_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_BFu7ll, BFu31i_Ip_BFu7ll)
//============================================================================


struct  BFu31i_Ip_BFu7s  {
  unsigned int v1:31;
  int *v2;
  unsigned short v3:7;
};
//SIG(1 BFu31i_Ip_BFu7s) C1{ Fi:31 Fp Fs:7}



static void Test_BFu31i_Ip_BFu7s()
{
  {
    init_simple_test("BFu31i_Ip_BFu7s");
    static STRUCT_IF_C BFu31i_Ip_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu31i_Ip_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu31i_Ip_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_BFu7s, BFu31i_Ip_BFu7s)
//============================================================================


struct  BFu31i_Ip_BFu8c  {
  unsigned int v1:31;
  int *v2;
  unsigned char v3:8;
};
//SIG(1 BFu31i_Ip_BFu8c) C1{ Fi:31 Fp Fc:8}



static void Test_BFu31i_Ip_BFu8c()
{
  {
    init_simple_test("BFu31i_Ip_BFu8c");
    static STRUCT_IF_C BFu31i_Ip_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu31i_Ip_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu31i_Ip_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_BFu8c, BFu31i_Ip_BFu8c)
//============================================================================


struct  BFu31i_Ip_BFu8i  {
  unsigned int v1:31;
  int *v2;
  unsigned int v3:8;
};
//SIG(1 BFu31i_Ip_BFu8i) C1{ Fi:31 Fp Fi:8}



static void Test_BFu31i_Ip_BFu8i()
{
  {
    init_simple_test("BFu31i_Ip_BFu8i");
    static STRUCT_IF_C BFu31i_Ip_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu31i_Ip_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu31i_Ip_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_BFu8i, BFu31i_Ip_BFu8i)
//============================================================================


struct  BFu31i_Ip_BFu8ll  {
  unsigned int v1:31;
  int *v2;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_Ip_BFu8ll) C1{ Fi:31 Fp FL:8}



static void Test_BFu31i_Ip_BFu8ll()
{
  {
    init_simple_test("BFu31i_Ip_BFu8ll");
    static STRUCT_IF_C BFu31i_Ip_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu31i_Ip_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu31i_Ip_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_BFu8ll, BFu31i_Ip_BFu8ll)
//============================================================================


struct  BFu31i_Ip_BFu8s  {
  unsigned int v1:31;
  int *v2;
  unsigned short v3:8;
};
//SIG(1 BFu31i_Ip_BFu8s) C1{ Fi:31 Fp Fs:8}



static void Test_BFu31i_Ip_BFu8s()
{
  {
    init_simple_test("BFu31i_Ip_BFu8s");
    static STRUCT_IF_C BFu31i_Ip_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu31i_Ip_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu31i_Ip_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_BFu8s, BFu31i_Ip_BFu8s)
//============================================================================


struct  BFu31i_Ip_BFu9i  {
  unsigned int v1:31;
  int *v2;
  unsigned int v3:9;
};
//SIG(1 BFu31i_Ip_BFu9i) C1{ Fi:31 Fp Fi:9}



static void Test_BFu31i_Ip_BFu9i()
{
  {
    init_simple_test("BFu31i_Ip_BFu9i");
    static STRUCT_IF_C BFu31i_Ip_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu31i_Ip_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu31i_Ip_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_BFu9i, BFu31i_Ip_BFu9i)
//============================================================================


struct  BFu31i_Ip_BFu9ll  {
  unsigned int v1:31;
  int *v2;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_Ip_BFu9ll) C1{ Fi:31 Fp FL:9}



static void Test_BFu31i_Ip_BFu9ll()
{
  {
    init_simple_test("BFu31i_Ip_BFu9ll");
    static STRUCT_IF_C BFu31i_Ip_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu31i_Ip_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu31i_Ip_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_BFu9ll, BFu31i_Ip_BFu9ll)
//============================================================================


struct  BFu31i_Ip_BFu9s  {
  unsigned int v1:31;
  int *v2;
  unsigned short v3:9;
};
//SIG(1 BFu31i_Ip_BFu9s) C1{ Fi:31 Fp Fs:9}



static void Test_BFu31i_Ip_BFu9s()
{
  {
    init_simple_test("BFu31i_Ip_BFu9s");
    static STRUCT_IF_C BFu31i_Ip_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu31i_Ip_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu31i_Ip_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_BFu9s, BFu31i_Ip_BFu9s)
//============================================================================


struct  BFu31i_Ip_C  {
  unsigned int v1:31;
  int *v2;
  char v3;
};
//SIG(1 BFu31i_Ip_C) C1{ Fi:31 Fp Fc}



static void Test_BFu31i_Ip_C()
{
  {
    init_simple_test("BFu31i_Ip_C");
    static STRUCT_IF_C BFu31i_Ip_C lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu31i_Ip_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_C, BFu31i_Ip_C)
//============================================================================


struct  BFu31i_Ip_D  {
  unsigned int v1:31;
  int *v2;
  double v3;
};
//SIG(1 BFu31i_Ip_D) C1{ Fi:31 Fp FL}



static void Test_BFu31i_Ip_D()
{
  {
    init_simple_test("BFu31i_Ip_D");
    static STRUCT_IF_C BFu31i_Ip_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ip_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu31i_Ip_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_D, BFu31i_Ip_D)
//============================================================================


struct  BFu31i_Ip_F  {
  unsigned int v1:31;
  int *v2;
  float v3;
};
//SIG(1 BFu31i_Ip_F) C1{ Fi:31 Fp Fi}



static void Test_BFu31i_Ip_F()
{
  {
    init_simple_test("BFu31i_Ip_F");
    static STRUCT_IF_C BFu31i_Ip_F lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu31i_Ip_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_F, BFu31i_Ip_F)
//============================================================================


struct  BFu31i_Ip_I  {
  unsigned int v1:31;
  int *v2;
  int v3;
};
//SIG(1 BFu31i_Ip_I) C1{ Fi:31 Fp Fi}



static void Test_BFu31i_Ip_I()
{
  {
    init_simple_test("BFu31i_Ip_I");
    static STRUCT_IF_C BFu31i_Ip_I lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu31i_Ip_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_I, BFu31i_Ip_I)
//============================================================================


struct  BFu31i_Ip_Ip  {
  unsigned int v1:31;
  int *v2;
  int *v3;
};
//SIG(1 BFu31i_Ip_Ip) C1{ Fi:31 Fp[2]}



static void Test_BFu31i_Ip_Ip()
{
  {
    init_simple_test("BFu31i_Ip_Ip");
    static STRUCT_IF_C BFu31i_Ip_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu31i_Ip_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_Ip, BFu31i_Ip_Ip)
//============================================================================


struct  BFu31i_Ip_L  {
  unsigned int v1:31;
  int *v2;
  __tsi64 v3;
};
//SIG(1 BFu31i_Ip_L) C1{ Fi:31 Fp FL}



static void Test_BFu31i_Ip_L()
{
  {
    init_simple_test("BFu31i_Ip_L");
    static STRUCT_IF_C BFu31i_Ip_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ip_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu31i_Ip_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_L, BFu31i_Ip_L)
//============================================================================


struct  BFu31i_Ip_S  {
  unsigned int v1:31;
  int *v2;
  short v3;
};
//SIG(1 BFu31i_Ip_S) C1{ Fi:31 Fp Fs}



static void Test_BFu31i_Ip_S()
{
  {
    init_simple_test("BFu31i_Ip_S");
    static STRUCT_IF_C BFu31i_Ip_S lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu31i_Ip_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_S, BFu31i_Ip_S)
//============================================================================


struct  BFu31i_Ip_Uc  {
  unsigned int v1:31;
  int *v2;
  unsigned char v3;
};
//SIG(1 BFu31i_Ip_Uc) C1{ Fi:31 Fp Fc}



static void Test_BFu31i_Ip_Uc()
{
  {
    init_simple_test("BFu31i_Ip_Uc");
    static STRUCT_IF_C BFu31i_Ip_Uc lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu31i_Ip_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_Uc, BFu31i_Ip_Uc)
//============================================================================


struct  BFu31i_Ip_Ui  {
  unsigned int v1:31;
  int *v2;
  unsigned int v3;
};
//SIG(1 BFu31i_Ip_Ui) C1{ Fi:31 Fp Fi}



static void Test_BFu31i_Ip_Ui()
{
  {
    init_simple_test("BFu31i_Ip_Ui");
    static STRUCT_IF_C BFu31i_Ip_Ui lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu31i_Ip_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_Ui, BFu31i_Ip_Ui)
//============================================================================


struct  BFu31i_Ip_Ul  {
  unsigned int v1:31;
  int *v2;
  __tsu64 v3;
};
//SIG(1 BFu31i_Ip_Ul) C1{ Fi:31 Fp FL}



static void Test_BFu31i_Ip_Ul()
{
  {
    init_simple_test("BFu31i_Ip_Ul");
    static STRUCT_IF_C BFu31i_Ip_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ip_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu31i_Ip_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_Ul, BFu31i_Ip_Ul)
//============================================================================


struct  BFu31i_Ip_Us  {
  unsigned int v1:31;
  int *v2;
  unsigned short v3;
};
//SIG(1 BFu31i_Ip_Us) C1{ Fi:31 Fp Fs}



static void Test_BFu31i_Ip_Us()
{
  {
    init_simple_test("BFu31i_Ip_Us");
    static STRUCT_IF_C BFu31i_Ip_Us lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu31i_Ip_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_Us, BFu31i_Ip_Us)
//============================================================================


struct  BFu31i_Ip_Vp  {
  unsigned int v1:31;
  int *v2;
  void *v3;
};
//SIG(1 BFu31i_Ip_Vp) C1{ Fi:31 Fp[2]}



static void Test_BFu31i_Ip_Vp()
{
  {
    init_simple_test("BFu31i_Ip_Vp");
    static STRUCT_IF_C BFu31i_Ip_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu31i_Ip_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ip_Vp, BFu31i_Ip_Vp)
//============================================================================


struct  BFu31i_L  {
  unsigned int v1:31;
  __tsi64 v2;
};
//SIG(1 BFu31i_L) C1{ Fi:31 FL}



static void Test_BFu31i_L()
{
  {
    init_simple_test("BFu31i_L");
    static STRUCT_IF_C BFu31i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L, BFu31i_L)
//============================================================================


struct  BFu31i_L_BFu15i  {
  unsigned int v1:31;
  __tsi64 v2;
  unsigned int v3:15;
};
//SIG(1 BFu31i_L_BFu15i) C1{ Fi:31 FL Fi:15}



static void Test_BFu31i_L_BFu15i()
{
  {
    init_simple_test("BFu31i_L_BFu15i");
    static STRUCT_IF_C BFu31i_L_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu31i_L_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu31i_L_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_BFu15i, BFu31i_L_BFu15i)
//============================================================================


struct  BFu31i_L_BFu15ll  {
  unsigned int v1:31;
  __tsi64 v2;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_L_BFu15ll) C1{ Fi:31 FL FL:15}



static void Test_BFu31i_L_BFu15ll()
{
  {
    init_simple_test("BFu31i_L_BFu15ll");
    static STRUCT_IF_C BFu31i_L_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu31i_L_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu31i_L_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_BFu15ll, BFu31i_L_BFu15ll)
//============================================================================


struct  BFu31i_L_BFu15s  {
  unsigned int v1:31;
  __tsi64 v2;
  unsigned short v3:15;
};
//SIG(1 BFu31i_L_BFu15s) C1{ Fi:31 FL Fs:15}



static void Test_BFu31i_L_BFu15s()
{
  {
    init_simple_test("BFu31i_L_BFu15s");
    static STRUCT_IF_C BFu31i_L_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu31i_L_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu31i_L_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_BFu15s, BFu31i_L_BFu15s)
//============================================================================


struct  BFu31i_L_BFu16i  {
  unsigned int v1:31;
  __tsi64 v2;
  unsigned int v3:16;
};
//SIG(1 BFu31i_L_BFu16i) C1{ Fi:31 FL Fi:16}



static void Test_BFu31i_L_BFu16i()
{
  {
    init_simple_test("BFu31i_L_BFu16i");
    static STRUCT_IF_C BFu31i_L_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu31i_L_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu31i_L_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_BFu16i, BFu31i_L_BFu16i)
//============================================================================


struct  BFu31i_L_BFu16ll  {
  unsigned int v1:31;
  __tsi64 v2;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_L_BFu16ll) C1{ Fi:31 FL FL:16}



static void Test_BFu31i_L_BFu16ll()
{
  {
    init_simple_test("BFu31i_L_BFu16ll");
    static STRUCT_IF_C BFu31i_L_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu31i_L_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu31i_L_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_BFu16ll, BFu31i_L_BFu16ll)
//============================================================================


struct  BFu31i_L_BFu16s  {
  unsigned int v1:31;
  __tsi64 v2;
  unsigned short v3:16;
};
//SIG(1 BFu31i_L_BFu16s) C1{ Fi:31 FL Fs:16}



static void Test_BFu31i_L_BFu16s()
{
  {
    init_simple_test("BFu31i_L_BFu16s");
    static STRUCT_IF_C BFu31i_L_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu31i_L_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu31i_L_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_BFu16s, BFu31i_L_BFu16s)
//============================================================================


struct  BFu31i_L_BFu17i  {
  unsigned int v1:31;
  __tsi64 v2;
  unsigned int v3:17;
};
//SIG(1 BFu31i_L_BFu17i) C1{ Fi:31 FL Fi:17}



static void Test_BFu31i_L_BFu17i()
{
  {
    init_simple_test("BFu31i_L_BFu17i");
    static STRUCT_IF_C BFu31i_L_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu31i_L_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu31i_L_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_BFu17i, BFu31i_L_BFu17i)
//============================================================================


struct  BFu31i_L_BFu17ll  {
  unsigned int v1:31;
  __tsi64 v2;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_L_BFu17ll) C1{ Fi:31 FL FL:17}



static void Test_BFu31i_L_BFu17ll()
{
  {
    init_simple_test("BFu31i_L_BFu17ll");
    static STRUCT_IF_C BFu31i_L_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu31i_L_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu31i_L_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_BFu17ll, BFu31i_L_BFu17ll)
//============================================================================


struct  BFu31i_L_BFu1c  {
  unsigned int v1:31;
  __tsi64 v2;
  unsigned char v3:1;
};
//SIG(1 BFu31i_L_BFu1c) C1{ Fi:31 FL Fc:1}



static void Test_BFu31i_L_BFu1c()
{
  {
    init_simple_test("BFu31i_L_BFu1c");
    static STRUCT_IF_C BFu31i_L_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu31i_L_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_BFu1c, BFu31i_L_BFu1c)
//============================================================================


struct  BFu31i_L_BFu1i  {
  unsigned int v1:31;
  __tsi64 v2;
  unsigned int v3:1;
};
//SIG(1 BFu31i_L_BFu1i) C1{ Fi:31 FL Fi:1}



static void Test_BFu31i_L_BFu1i()
{
  {
    init_simple_test("BFu31i_L_BFu1i");
    static STRUCT_IF_C BFu31i_L_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu31i_L_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_BFu1i, BFu31i_L_BFu1i)
//============================================================================


struct  BFu31i_L_BFu1ll  {
  unsigned int v1:31;
  __tsi64 v2;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_L_BFu1ll) C1{ Fi:31 FL FL:1}



static void Test_BFu31i_L_BFu1ll()
{
  {
    init_simple_test("BFu31i_L_BFu1ll");
    static STRUCT_IF_C BFu31i_L_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu31i_L_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_BFu1ll, BFu31i_L_BFu1ll)
//============================================================================


struct  BFu31i_L_BFu1s  {
  unsigned int v1:31;
  __tsi64 v2;
  unsigned short v3:1;
};
//SIG(1 BFu31i_L_BFu1s) C1{ Fi:31 FL Fs:1}



static void Test_BFu31i_L_BFu1s()
{
  {
    init_simple_test("BFu31i_L_BFu1s");
    static STRUCT_IF_C BFu31i_L_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu31i_L_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_BFu1s, BFu31i_L_BFu1s)
//============================================================================


struct  BFu31i_L_BFu31i  {
  unsigned int v1:31;
  __tsi64 v2;
  unsigned int v3:31;
};
//SIG(1 BFu31i_L_BFu31i) C1{ Fi:31 FL Fi:31}



static void Test_BFu31i_L_BFu31i()
{
  {
    init_simple_test("BFu31i_L_BFu31i");
    static STRUCT_IF_C BFu31i_L_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu31i_L_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_BFu31i, BFu31i_L_BFu31i)
//============================================================================


struct  BFu31i_L_BFu31ll  {
  unsigned int v1:31;
  __tsi64 v2;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_L_BFu31ll) C1{ Fi:31 FL FL:31}



static void Test_BFu31i_L_BFu31ll()
{
  {
    init_simple_test("BFu31i_L_BFu31ll");
    static STRUCT_IF_C BFu31i_L_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu31i_L_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_BFu31ll, BFu31i_L_BFu31ll)
//============================================================================


struct  BFu31i_L_BFu32i  {
  unsigned int v1:31;
  __tsi64 v2;
  unsigned int v3:32;
};
//SIG(1 BFu31i_L_BFu32i) C1{ Fi:31 FL Fi:32}



static void Test_BFu31i_L_BFu32i()
{
  {
    init_simple_test("BFu31i_L_BFu32i");
    static STRUCT_IF_C BFu31i_L_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu31i_L_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu31i_L_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_BFu32i, BFu31i_L_BFu32i)
//============================================================================


struct  BFu31i_L_BFu32ll  {
  unsigned int v1:31;
  __tsi64 v2;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_L_BFu32ll) C1{ Fi:31 FL FL:32}



static void Test_BFu31i_L_BFu32ll()
{
  {
    init_simple_test("BFu31i_L_BFu32ll");
    static STRUCT_IF_C BFu31i_L_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu31i_L_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu31i_L_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_BFu32ll, BFu31i_L_BFu32ll)
//============================================================================


struct  BFu31i_L_BFu33  {
  unsigned int v1:31;
  __tsi64 v2;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_L_BFu33) C1{ Fi:31 FL FL:33}



static void Test_BFu31i_L_BFu33()
{
  {
    init_simple_test("BFu31i_L_BFu33");
    static STRUCT_IF_C BFu31i_L_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu31i_L_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu31i_L_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu31i_L_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_BFu33, BFu31i_L_BFu33)
//============================================================================


struct  BFu31i_L_BFu7c  {
  unsigned int v1:31;
  __tsi64 v2;
  unsigned char v3:7;
};
//SIG(1 BFu31i_L_BFu7c) C1{ Fi:31 FL Fc:7}



static void Test_BFu31i_L_BFu7c()
{
  {
    init_simple_test("BFu31i_L_BFu7c");
    static STRUCT_IF_C BFu31i_L_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu31i_L_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu31i_L_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_BFu7c, BFu31i_L_BFu7c)
//============================================================================


struct  BFu31i_L_BFu7i  {
  unsigned int v1:31;
  __tsi64 v2;
  unsigned int v3:7;
};
//SIG(1 BFu31i_L_BFu7i) C1{ Fi:31 FL Fi:7}



static void Test_BFu31i_L_BFu7i()
{
  {
    init_simple_test("BFu31i_L_BFu7i");
    static STRUCT_IF_C BFu31i_L_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu31i_L_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu31i_L_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_BFu7i, BFu31i_L_BFu7i)
//============================================================================


struct  BFu31i_L_BFu7ll  {
  unsigned int v1:31;
  __tsi64 v2;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_L_BFu7ll) C1{ Fi:31 FL FL:7}



static void Test_BFu31i_L_BFu7ll()
{
  {
    init_simple_test("BFu31i_L_BFu7ll");
    static STRUCT_IF_C BFu31i_L_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu31i_L_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu31i_L_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_BFu7ll, BFu31i_L_BFu7ll)
//============================================================================


struct  BFu31i_L_BFu7s  {
  unsigned int v1:31;
  __tsi64 v2;
  unsigned short v3:7;
};
//SIG(1 BFu31i_L_BFu7s) C1{ Fi:31 FL Fs:7}



static void Test_BFu31i_L_BFu7s()
{
  {
    init_simple_test("BFu31i_L_BFu7s");
    static STRUCT_IF_C BFu31i_L_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu31i_L_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu31i_L_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_BFu7s, BFu31i_L_BFu7s)
//============================================================================


struct  BFu31i_L_BFu8c  {
  unsigned int v1:31;
  __tsi64 v2;
  unsigned char v3:8;
};
//SIG(1 BFu31i_L_BFu8c) C1{ Fi:31 FL Fc:8}



static void Test_BFu31i_L_BFu8c()
{
  {
    init_simple_test("BFu31i_L_BFu8c");
    static STRUCT_IF_C BFu31i_L_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu31i_L_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu31i_L_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_BFu8c, BFu31i_L_BFu8c)
//============================================================================


struct  BFu31i_L_BFu8i  {
  unsigned int v1:31;
  __tsi64 v2;
  unsigned int v3:8;
};
//SIG(1 BFu31i_L_BFu8i) C1{ Fi:31 FL Fi:8}



static void Test_BFu31i_L_BFu8i()
{
  {
    init_simple_test("BFu31i_L_BFu8i");
    static STRUCT_IF_C BFu31i_L_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu31i_L_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu31i_L_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_BFu8i, BFu31i_L_BFu8i)
//============================================================================


struct  BFu31i_L_BFu8ll  {
  unsigned int v1:31;
  __tsi64 v2;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_L_BFu8ll) C1{ Fi:31 FL FL:8}



static void Test_BFu31i_L_BFu8ll()
{
  {
    init_simple_test("BFu31i_L_BFu8ll");
    static STRUCT_IF_C BFu31i_L_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu31i_L_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu31i_L_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_BFu8ll, BFu31i_L_BFu8ll)
//============================================================================


struct  BFu31i_L_BFu8s  {
  unsigned int v1:31;
  __tsi64 v2;
  unsigned short v3:8;
};
//SIG(1 BFu31i_L_BFu8s) C1{ Fi:31 FL Fs:8}



static void Test_BFu31i_L_BFu8s()
{
  {
    init_simple_test("BFu31i_L_BFu8s");
    static STRUCT_IF_C BFu31i_L_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu31i_L_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu31i_L_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_BFu8s, BFu31i_L_BFu8s)
//============================================================================


struct  BFu31i_L_BFu9i  {
  unsigned int v1:31;
  __tsi64 v2;
  unsigned int v3:9;
};
//SIG(1 BFu31i_L_BFu9i) C1{ Fi:31 FL Fi:9}



static void Test_BFu31i_L_BFu9i()
{
  {
    init_simple_test("BFu31i_L_BFu9i");
    static STRUCT_IF_C BFu31i_L_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu31i_L_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu31i_L_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_BFu9i, BFu31i_L_BFu9i)
//============================================================================


struct  BFu31i_L_BFu9ll  {
  unsigned int v1:31;
  __tsi64 v2;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_L_BFu9ll) C1{ Fi:31 FL FL:9}



static void Test_BFu31i_L_BFu9ll()
{
  {
    init_simple_test("BFu31i_L_BFu9ll");
    static STRUCT_IF_C BFu31i_L_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu31i_L_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu31i_L_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_BFu9ll, BFu31i_L_BFu9ll)
//============================================================================


struct  BFu31i_L_BFu9s  {
  unsigned int v1:31;
  __tsi64 v2;
  unsigned short v3:9;
};
//SIG(1 BFu31i_L_BFu9s) C1{ Fi:31 FL Fs:9}



static void Test_BFu31i_L_BFu9s()
{
  {
    init_simple_test("BFu31i_L_BFu9s");
    static STRUCT_IF_C BFu31i_L_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu31i_L_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu31i_L_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_BFu9s, BFu31i_L_BFu9s)
//============================================================================


struct  BFu31i_L_C  {
  unsigned int v1:31;
  __tsi64 v2;
  char v3;
};
//SIG(1 BFu31i_L_C) C1{ Fi:31 FL Fc}



static void Test_BFu31i_L_C()
{
  {
    init_simple_test("BFu31i_L_C");
    static STRUCT_IF_C BFu31i_L_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_L_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_C, BFu31i_L_C)
//============================================================================


struct  BFu31i_L_D  {
  unsigned int v1:31;
  __tsi64 v2;
  double v3;
};
//SIG(1 BFu31i_L_D) C1{ Fi:31 FL[2]}



static void Test_BFu31i_L_D()
{
  {
    init_simple_test("BFu31i_L_D");
    static STRUCT_IF_C BFu31i_L_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu31i_L_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_L_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_D, BFu31i_L_D)
//============================================================================


struct  BFu31i_L_F  {
  unsigned int v1:31;
  __tsi64 v2;
  float v3;
};
//SIG(1 BFu31i_L_F) C1{ Fi:31 FL Fi}



static void Test_BFu31i_L_F()
{
  {
    init_simple_test("BFu31i_L_F");
    static STRUCT_IF_C BFu31i_L_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_L_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_F, BFu31i_L_F)
//============================================================================


struct  BFu31i_L_I  {
  unsigned int v1:31;
  __tsi64 v2;
  int v3;
};
//SIG(1 BFu31i_L_I) C1{ Fi:31 FL Fi}



static void Test_BFu31i_L_I()
{
  {
    init_simple_test("BFu31i_L_I");
    static STRUCT_IF_C BFu31i_L_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_L_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_I, BFu31i_L_I)
//============================================================================


struct  BFu31i_L_Ip  {
  unsigned int v1:31;
  __tsi64 v2;
  int *v3;
};
//SIG(1 BFu31i_L_Ip) C1{ Fi:31 FL Fp}



static void Test_BFu31i_L_Ip()
{
  {
    init_simple_test("BFu31i_L_Ip");
    static STRUCT_IF_C BFu31i_L_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_L_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_Ip, BFu31i_L_Ip)
//============================================================================


struct  BFu31i_L_L  {
  unsigned int v1:31;
  __tsi64 v2;
  __tsi64 v3;
};
//SIG(1 BFu31i_L_L) C1{ Fi:31 FL[2]}



static void Test_BFu31i_L_L()
{
  {
    init_simple_test("BFu31i_L_L");
    static STRUCT_IF_C BFu31i_L_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu31i_L_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_L_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_L, BFu31i_L_L)
//============================================================================


struct  BFu31i_L_S  {
  unsigned int v1:31;
  __tsi64 v2;
  short v3;
};
//SIG(1 BFu31i_L_S) C1{ Fi:31 FL Fs}



static void Test_BFu31i_L_S()
{
  {
    init_simple_test("BFu31i_L_S");
    static STRUCT_IF_C BFu31i_L_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_L_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_S, BFu31i_L_S)
//============================================================================


struct  BFu31i_L_Uc  {
  unsigned int v1:31;
  __tsi64 v2;
  unsigned char v3;
};
//SIG(1 BFu31i_L_Uc) C1{ Fi:31 FL Fc}



static void Test_BFu31i_L_Uc()
{
  {
    init_simple_test("BFu31i_L_Uc");
    static STRUCT_IF_C BFu31i_L_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_L_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_Uc, BFu31i_L_Uc)
//============================================================================


struct  BFu31i_L_Ui  {
  unsigned int v1:31;
  __tsi64 v2;
  unsigned int v3;
};
//SIG(1 BFu31i_L_Ui) C1{ Fi:31 FL Fi}



static void Test_BFu31i_L_Ui()
{
  {
    init_simple_test("BFu31i_L_Ui");
    static STRUCT_IF_C BFu31i_L_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_L_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_Ui, BFu31i_L_Ui)
//============================================================================


struct  BFu31i_L_Ul  {
  unsigned int v1:31;
  __tsi64 v2;
  __tsu64 v3;
};
//SIG(1 BFu31i_L_Ul) C1{ Fi:31 FL[2]}



static void Test_BFu31i_L_Ul()
{
  {
    init_simple_test("BFu31i_L_Ul");
    static STRUCT_IF_C BFu31i_L_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu31i_L_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_L_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_Ul, BFu31i_L_Ul)
//============================================================================


struct  BFu31i_L_Us  {
  unsigned int v1:31;
  __tsi64 v2;
  unsigned short v3;
};
//SIG(1 BFu31i_L_Us) C1{ Fi:31 FL Fs}



static void Test_BFu31i_L_Us()
{
  {
    init_simple_test("BFu31i_L_Us");
    static STRUCT_IF_C BFu31i_L_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_L_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_Us, BFu31i_L_Us)
//============================================================================


struct  BFu31i_L_Vp  {
  unsigned int v1:31;
  __tsi64 v2;
  void *v3;
};
//SIG(1 BFu31i_L_Vp) C1{ Fi:31 FL Fp}



static void Test_BFu31i_L_Vp()
{
  {
    init_simple_test("BFu31i_L_Vp");
    static STRUCT_IF_C BFu31i_L_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_L_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_L_Vp, BFu31i_L_Vp)
//============================================================================


struct  BFu31i_S  {
  unsigned int v1:31;
  short v2;
};
//SIG(1 BFu31i_S) C1{ Fi:31 Fs}



static void Test_BFu31i_S()
{
  {
    init_simple_test("BFu31i_S");
    static STRUCT_IF_C BFu31i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S");
    check_field_offset(lv, v2, 4, "BFu31i_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S, BFu31i_S)
//============================================================================


struct  BFu31i_S_BFu15i  {
  unsigned int v1:31;
  short v2;
  unsigned int v3:15;
};
//SIG(1 BFu31i_S_BFu15i) C1{ Fi:31 Fs Fi:15}



static void Test_BFu31i_S_BFu15i()
{
  {
    init_simple_test("BFu31i_S_BFu15i");
    static STRUCT_IF_C BFu31i_S_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_S_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_S_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu15i");
    check_field_offset(lv, v2, 4, "BFu31i_S_BFu15i.v2");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_S_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_S_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_BFu15i, BFu31i_S_BFu15i)
//============================================================================


struct  BFu31i_S_BFu15ll  {
  unsigned int v1:31;
  short v2;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_S_BFu15ll) C1{ Fi:31 Fs FL:15}



static void Test_BFu31i_S_BFu15ll()
{
  {
    init_simple_test("BFu31i_S_BFu15ll");
    static STRUCT_IF_C BFu31i_S_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_S_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_S_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu31i_S_BFu15ll.v2");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_S_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_S_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_BFu15ll, BFu31i_S_BFu15ll)
//============================================================================


struct  BFu31i_S_BFu15s  {
  unsigned int v1:31;
  short v2;
  unsigned short v3:15;
};
//SIG(1 BFu31i_S_BFu15s) C1{ Fi:31 Fs Fs:15}



static void Test_BFu31i_S_BFu15s()
{
  {
    init_simple_test("BFu31i_S_BFu15s");
    static STRUCT_IF_C BFu31i_S_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_S_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_S_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu15s");
    check_field_offset(lv, v2, 4, "BFu31i_S_BFu15s.v2");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_S_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_S_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_BFu15s, BFu31i_S_BFu15s)
//============================================================================


struct  BFu31i_S_BFu16i  {
  unsigned int v1:31;
  short v2;
  unsigned int v3:16;
};
//SIG(1 BFu31i_S_BFu16i) C1{ Fi:31 Fs Fi:16}



static void Test_BFu31i_S_BFu16i()
{
  {
    init_simple_test("BFu31i_S_BFu16i");
    static STRUCT_IF_C BFu31i_S_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_S_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_S_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu16i");
    check_field_offset(lv, v2, 4, "BFu31i_S_BFu16i.v2");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_S_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_S_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_BFu16i, BFu31i_S_BFu16i)
//============================================================================


struct  BFu31i_S_BFu16ll  {
  unsigned int v1:31;
  short v2;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_S_BFu16ll) C1{ Fi:31 Fs FL:16}



static void Test_BFu31i_S_BFu16ll()
{
  {
    init_simple_test("BFu31i_S_BFu16ll");
    static STRUCT_IF_C BFu31i_S_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_S_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_S_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu31i_S_BFu16ll.v2");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_S_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_S_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_BFu16ll, BFu31i_S_BFu16ll)
//============================================================================


struct  BFu31i_S_BFu16s  {
  unsigned int v1:31;
  short v2;
  unsigned short v3:16;
};
//SIG(1 BFu31i_S_BFu16s) C1{ Fi:31 Fs Fs:16}



static void Test_BFu31i_S_BFu16s()
{
  {
    init_simple_test("BFu31i_S_BFu16s");
    static STRUCT_IF_C BFu31i_S_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_S_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_S_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu16s");
    check_field_offset(lv, v2, 4, "BFu31i_S_BFu16s.v2");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_S_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_S_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_BFu16s, BFu31i_S_BFu16s)
//============================================================================


struct  BFu31i_S_BFu17i  {
  unsigned int v1:31;
  short v2;
  unsigned int v3:17;
};
//SIG(1 BFu31i_S_BFu17i) C1{ Fi:31 Fs Fi:17}



static void Test_BFu31i_S_BFu17i()
{
  {
    init_simple_test("BFu31i_S_BFu17i");
    static STRUCT_IF_C BFu31i_S_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_S_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_S_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu17i");
    check_field_offset(lv, v2, 4, "BFu31i_S_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31i_S_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31i_S_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_BFu17i, BFu31i_S_BFu17i)
//============================================================================


struct  BFu31i_S_BFu17ll  {
  unsigned int v1:31;
  short v2;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_S_BFu17ll) C1{ Fi:31 Fs FL:17}



static void Test_BFu31i_S_BFu17ll()
{
  {
    init_simple_test("BFu31i_S_BFu17ll");
    static STRUCT_IF_C BFu31i_S_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_S_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_S_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu31i_S_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, 1, "BFu31i_S_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, hide_ull(1LL<<16), "BFu31i_S_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_BFu17ll, BFu31i_S_BFu17ll)
//============================================================================


struct  BFu31i_S_BFu1c  {
  unsigned int v1:31;
  short v2;
  unsigned char v3:1;
};
//SIG(1 BFu31i_S_BFu1c) C1{ Fi:31 Fs Fc:1}



static void Test_BFu31i_S_BFu1c()
{
  {
    init_simple_test("BFu31i_S_BFu1c");
    static STRUCT_IF_C BFu31i_S_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_S_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_S_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu1c");
    check_field_offset(lv, v2, 4, "BFu31i_S_BFu1c.v2");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31i_S_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_BFu1c, BFu31i_S_BFu1c)
//============================================================================


struct  BFu31i_S_BFu1i  {
  unsigned int v1:31;
  short v2;
  unsigned int v3:1;
};
//SIG(1 BFu31i_S_BFu1i) C1{ Fi:31 Fs Fi:1}



static void Test_BFu31i_S_BFu1i()
{
  {
    init_simple_test("BFu31i_S_BFu1i");
    static STRUCT_IF_C BFu31i_S_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_S_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_S_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu1i");
    check_field_offset(lv, v2, 4, "BFu31i_S_BFu1i.v2");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31i_S_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_BFu1i, BFu31i_S_BFu1i)
//============================================================================


struct  BFu31i_S_BFu1ll  {
  unsigned int v1:31;
  short v2;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_S_BFu1ll) C1{ Fi:31 Fs FL:1}



static void Test_BFu31i_S_BFu1ll()
{
  {
    init_simple_test("BFu31i_S_BFu1ll");
    static STRUCT_IF_C BFu31i_S_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_S_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_S_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu31i_S_BFu1ll.v2");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31i_S_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_BFu1ll, BFu31i_S_BFu1ll)
//============================================================================


struct  BFu31i_S_BFu1s  {
  unsigned int v1:31;
  short v2;
  unsigned short v3:1;
};
//SIG(1 BFu31i_S_BFu1s) C1{ Fi:31 Fs Fs:1}



static void Test_BFu31i_S_BFu1s()
{
  {
    init_simple_test("BFu31i_S_BFu1s");
    static STRUCT_IF_C BFu31i_S_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_S_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_S_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu1s");
    check_field_offset(lv, v2, 4, "BFu31i_S_BFu1s.v2");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31i_S_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_BFu1s, BFu31i_S_BFu1s)
//============================================================================


struct  BFu31i_S_BFu31i  {
  unsigned int v1:31;
  short v2;
  unsigned int v3:31;
};
//SIG(1 BFu31i_S_BFu31i) C1{ Fi:31 Fs Fi:31}



static void Test_BFu31i_S_BFu31i()
{
  {
    init_simple_test("BFu31i_S_BFu31i");
    static STRUCT_IF_C BFu31i_S_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_S_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_S_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu31i");
    check_field_offset(lv, v2, 4, "BFu31i_S_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_S_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_BFu31i, BFu31i_S_BFu31i)
//============================================================================


struct  BFu31i_S_BFu31ll  {
  unsigned int v1:31;
  short v2;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_S_BFu31ll) C1{ Fi:31 Fs FL:31}



static void Test_BFu31i_S_BFu31ll()
{
  {
    init_simple_test("BFu31i_S_BFu31ll");
    static STRUCT_IF_C BFu31i_S_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_S_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_S_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu31i_S_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, 1, "BFu31i_S_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_BFu31ll, BFu31i_S_BFu31ll)
//============================================================================


struct  BFu31i_S_BFu32i  {
  unsigned int v1:31;
  short v2;
  unsigned int v3:32;
};
//SIG(1 BFu31i_S_BFu32i) C1{ Fi:31 Fs Fi:32}



static void Test_BFu31i_S_BFu32i()
{
  {
    init_simple_test("BFu31i_S_BFu32i");
    static STRUCT_IF_C BFu31i_S_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_S_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_S_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu32i");
    check_field_offset(lv, v2, 4, "BFu31i_S_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_S_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_S_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_BFu32i, BFu31i_S_BFu32i)
//============================================================================


struct  BFu31i_S_BFu32ll  {
  unsigned int v1:31;
  short v2;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_S_BFu32ll) C1{ Fi:31 Fs FL:32}



static void Test_BFu31i_S_BFu32ll()
{
  {
    init_simple_test("BFu31i_S_BFu32ll");
    static STRUCT_IF_C BFu31i_S_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_S_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_S_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu31i_S_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, 1, "BFu31i_S_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, hide_ull(1LL<<31), "BFu31i_S_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_BFu32ll, BFu31i_S_BFu32ll)
//============================================================================


struct  BFu31i_S_BFu33  {
  unsigned int v1:31;
  short v2;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_S_BFu33) C1{ Fi:31 Fs FL:33}



static void Test_BFu31i_S_BFu33()
{
  {
    init_simple_test("BFu31i_S_BFu33");
    static STRUCT_IF_C BFu31i_S_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_S_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_S_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu33");
    check_field_offset(lv, v2, 4, "BFu31i_S_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, 1, "BFu31i_S_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, hide_ull(1LL<<32), "BFu31i_S_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_BFu33, BFu31i_S_BFu33)
//============================================================================


struct  BFu31i_S_BFu7c  {
  unsigned int v1:31;
  short v2;
  unsigned char v3:7;
};
//SIG(1 BFu31i_S_BFu7c) C1{ Fi:31 Fs Fc:7}



static void Test_BFu31i_S_BFu7c()
{
  {
    init_simple_test("BFu31i_S_BFu7c");
    static STRUCT_IF_C BFu31i_S_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_S_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_S_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu7c");
    check_field_offset(lv, v2, 4, "BFu31i_S_BFu7c.v2");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31i_S_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31i_S_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_BFu7c, BFu31i_S_BFu7c)
//============================================================================


struct  BFu31i_S_BFu7i  {
  unsigned int v1:31;
  short v2;
  unsigned int v3:7;
};
//SIG(1 BFu31i_S_BFu7i) C1{ Fi:31 Fs Fi:7}



static void Test_BFu31i_S_BFu7i()
{
  {
    init_simple_test("BFu31i_S_BFu7i");
    static STRUCT_IF_C BFu31i_S_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_S_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_S_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu7i");
    check_field_offset(lv, v2, 4, "BFu31i_S_BFu7i.v2");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31i_S_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31i_S_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_BFu7i, BFu31i_S_BFu7i)
//============================================================================


struct  BFu31i_S_BFu7ll  {
  unsigned int v1:31;
  short v2;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_S_BFu7ll) C1{ Fi:31 Fs FL:7}



static void Test_BFu31i_S_BFu7ll()
{
  {
    init_simple_test("BFu31i_S_BFu7ll");
    static STRUCT_IF_C BFu31i_S_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_S_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_S_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu31i_S_BFu7ll.v2");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31i_S_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31i_S_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_BFu7ll, BFu31i_S_BFu7ll)
//============================================================================


struct  BFu31i_S_BFu7s  {
  unsigned int v1:31;
  short v2;
  unsigned short v3:7;
};
//SIG(1 BFu31i_S_BFu7s) C1{ Fi:31 Fs Fs:7}



static void Test_BFu31i_S_BFu7s()
{
  {
    init_simple_test("BFu31i_S_BFu7s");
    static STRUCT_IF_C BFu31i_S_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_S_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_S_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu7s");
    check_field_offset(lv, v2, 4, "BFu31i_S_BFu7s.v2");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31i_S_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31i_S_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_BFu7s, BFu31i_S_BFu7s)
//============================================================================


struct  BFu31i_S_BFu8c  {
  unsigned int v1:31;
  short v2;
  unsigned char v3:8;
};
//SIG(1 BFu31i_S_BFu8c) C1{ Fi:31 Fs Fc:8}



static void Test_BFu31i_S_BFu8c()
{
  {
    init_simple_test("BFu31i_S_BFu8c");
    static STRUCT_IF_C BFu31i_S_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_S_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_S_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu8c");
    check_field_offset(lv, v2, 4, "BFu31i_S_BFu8c.v2");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_S_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_S_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_BFu8c, BFu31i_S_BFu8c)
//============================================================================


struct  BFu31i_S_BFu8i  {
  unsigned int v1:31;
  short v2;
  unsigned int v3:8;
};
//SIG(1 BFu31i_S_BFu8i) C1{ Fi:31 Fs Fi:8}



static void Test_BFu31i_S_BFu8i()
{
  {
    init_simple_test("BFu31i_S_BFu8i");
    static STRUCT_IF_C BFu31i_S_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_S_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_S_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu8i");
    check_field_offset(lv, v2, 4, "BFu31i_S_BFu8i.v2");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_S_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_S_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_BFu8i, BFu31i_S_BFu8i)
//============================================================================


struct  BFu31i_S_BFu8ll  {
  unsigned int v1:31;
  short v2;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_S_BFu8ll) C1{ Fi:31 Fs FL:8}



static void Test_BFu31i_S_BFu8ll()
{
  {
    init_simple_test("BFu31i_S_BFu8ll");
    static STRUCT_IF_C BFu31i_S_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_S_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_S_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu31i_S_BFu8ll.v2");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_S_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_S_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_BFu8ll, BFu31i_S_BFu8ll)
//============================================================================


struct  BFu31i_S_BFu8s  {
  unsigned int v1:31;
  short v2;
  unsigned short v3:8;
};
//SIG(1 BFu31i_S_BFu8s) C1{ Fi:31 Fs Fs:8}



static void Test_BFu31i_S_BFu8s()
{
  {
    init_simple_test("BFu31i_S_BFu8s");
    static STRUCT_IF_C BFu31i_S_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_S_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_S_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu8s");
    check_field_offset(lv, v2, 4, "BFu31i_S_BFu8s.v2");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_S_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_S_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_BFu8s, BFu31i_S_BFu8s)
//============================================================================


struct  BFu31i_S_BFu9i  {
  unsigned int v1:31;
  short v2;
  unsigned int v3:9;
};
//SIG(1 BFu31i_S_BFu9i) C1{ Fi:31 Fs Fi:9}



static void Test_BFu31i_S_BFu9i()
{
  {
    init_simple_test("BFu31i_S_BFu9i");
    static STRUCT_IF_C BFu31i_S_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_S_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_S_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu9i");
    check_field_offset(lv, v2, 4, "BFu31i_S_BFu9i.v2");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31i_S_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31i_S_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_BFu9i, BFu31i_S_BFu9i)
//============================================================================


struct  BFu31i_S_BFu9ll  {
  unsigned int v1:31;
  short v2;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_S_BFu9ll) C1{ Fi:31 Fs FL:9}



static void Test_BFu31i_S_BFu9ll()
{
  {
    init_simple_test("BFu31i_S_BFu9ll");
    static STRUCT_IF_C BFu31i_S_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_S_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_S_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu31i_S_BFu9ll.v2");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31i_S_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31i_S_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_BFu9ll, BFu31i_S_BFu9ll)
//============================================================================


struct  BFu31i_S_BFu9s  {
  unsigned int v1:31;
  short v2;
  unsigned short v3:9;
};
//SIG(1 BFu31i_S_BFu9s) C1{ Fi:31 Fs Fs:9}



static void Test_BFu31i_S_BFu9s()
{
  {
    init_simple_test("BFu31i_S_BFu9s");
    static STRUCT_IF_C BFu31i_S_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_S_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_S_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_BFu9s");
    check_field_offset(lv, v2, 4, "BFu31i_S_BFu9s.v2");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31i_S_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31i_S_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_BFu9s, BFu31i_S_BFu9s)
//============================================================================


struct  BFu31i_S_C  {
  unsigned int v1:31;
  short v2;
  char v3;
};
//SIG(1 BFu31i_S_C) C1{ Fi:31 Fs Fc}



static void Test_BFu31i_S_C()
{
  {
    init_simple_test("BFu31i_S_C");
    static STRUCT_IF_C BFu31i_S_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_S_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_S_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_C");
    check_field_offset(lv, v2, 4, "BFu31i_S_C.v2");
    check_field_offset(lv, v3, 6, "BFu31i_S_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_C, BFu31i_S_C)
//============================================================================


struct  BFu31i_S_D  {
  unsigned int v1:31;
  short v2;
  double v3;
};
//SIG(1 BFu31i_S_D) C1{ Fi:31 Fs FL}



static void Test_BFu31i_S_D()
{
  {
    init_simple_test("BFu31i_S_D");
    static STRUCT_IF_C BFu31i_S_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_S_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_S_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_D");
    check_field_offset(lv, v2, 4, "BFu31i_S_D.v2");
    check_field_offset(lv, v3, 8, "BFu31i_S_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_D, BFu31i_S_D)
//============================================================================


struct  BFu31i_S_F  {
  unsigned int v1:31;
  short v2;
  float v3;
};
//SIG(1 BFu31i_S_F) C1{ Fi:31 Fs Fi}



static void Test_BFu31i_S_F()
{
  {
    init_simple_test("BFu31i_S_F");
    static STRUCT_IF_C BFu31i_S_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_S_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_S_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_F");
    check_field_offset(lv, v2, 4, "BFu31i_S_F.v2");
    check_field_offset(lv, v3, 8, "BFu31i_S_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_F, BFu31i_S_F)
//============================================================================


struct  BFu31i_S_I  {
  unsigned int v1:31;
  short v2;
  int v3;
};
//SIG(1 BFu31i_S_I) C1{ Fi:31 Fs Fi}



static void Test_BFu31i_S_I()
{
  {
    init_simple_test("BFu31i_S_I");
    static STRUCT_IF_C BFu31i_S_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_S_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_S_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_I");
    check_field_offset(lv, v2, 4, "BFu31i_S_I.v2");
    check_field_offset(lv, v3, 8, "BFu31i_S_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_I, BFu31i_S_I)
//============================================================================


struct  BFu31i_S_Ip  {
  unsigned int v1:31;
  short v2;
  int *v3;
};
//SIG(1 BFu31i_S_Ip) C1{ Fi:31 Fs Fp}



static void Test_BFu31i_S_Ip()
{
  {
    init_simple_test("BFu31i_S_Ip");
    static STRUCT_IF_C BFu31i_S_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_S_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_S_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_Ip");
    check_field_offset(lv, v2, 4, "BFu31i_S_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu31i_S_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_Ip, BFu31i_S_Ip)
//============================================================================


struct  BFu31i_S_L  {
  unsigned int v1:31;
  short v2;
  __tsi64 v3;
};
//SIG(1 BFu31i_S_L) C1{ Fi:31 Fs FL}



static void Test_BFu31i_S_L()
{
  {
    init_simple_test("BFu31i_S_L");
    static STRUCT_IF_C BFu31i_S_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_S_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_S_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_L");
    check_field_offset(lv, v2, 4, "BFu31i_S_L.v2");
    check_field_offset(lv, v3, 8, "BFu31i_S_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_L, BFu31i_S_L)
//============================================================================


struct  BFu31i_S_S  {
  unsigned int v1:31;
  short v2;
  short v3;
};
//SIG(1 BFu31i_S_S) C1{ Fi:31 Fs[2]}



static void Test_BFu31i_S_S()
{
  {
    init_simple_test("BFu31i_S_S");
    static STRUCT_IF_C BFu31i_S_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_S_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_S_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_S");
    check_field_offset(lv, v2, 4, "BFu31i_S_S.v2");
    check_field_offset(lv, v3, 6, "BFu31i_S_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_S, BFu31i_S_S)
//============================================================================


struct  BFu31i_S_Uc  {
  unsigned int v1:31;
  short v2;
  unsigned char v3;
};
//SIG(1 BFu31i_S_Uc) C1{ Fi:31 Fs Fc}



static void Test_BFu31i_S_Uc()
{
  {
    init_simple_test("BFu31i_S_Uc");
    static STRUCT_IF_C BFu31i_S_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_S_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_S_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_Uc");
    check_field_offset(lv, v2, 4, "BFu31i_S_Uc.v2");
    check_field_offset(lv, v3, 6, "BFu31i_S_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_Uc, BFu31i_S_Uc)
//============================================================================


struct  BFu31i_S_Ui  {
  unsigned int v1:31;
  short v2;
  unsigned int v3;
};
//SIG(1 BFu31i_S_Ui) C1{ Fi:31 Fs Fi}



static void Test_BFu31i_S_Ui()
{
  {
    init_simple_test("BFu31i_S_Ui");
    static STRUCT_IF_C BFu31i_S_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_S_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_S_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_Ui");
    check_field_offset(lv, v2, 4, "BFu31i_S_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu31i_S_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_Ui, BFu31i_S_Ui)
//============================================================================


struct  BFu31i_S_Ul  {
  unsigned int v1:31;
  short v2;
  __tsu64 v3;
};
//SIG(1 BFu31i_S_Ul) C1{ Fi:31 Fs FL}



static void Test_BFu31i_S_Ul()
{
  {
    init_simple_test("BFu31i_S_Ul");
    static STRUCT_IF_C BFu31i_S_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_S_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_S_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_Ul");
    check_field_offset(lv, v2, 4, "BFu31i_S_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu31i_S_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_Ul, BFu31i_S_Ul)
//============================================================================


struct  BFu31i_S_Us  {
  unsigned int v1:31;
  short v2;
  unsigned short v3;
};
//SIG(1 BFu31i_S_Us) C1{ Fi:31 Fs[2]}



static void Test_BFu31i_S_Us()
{
  {
    init_simple_test("BFu31i_S_Us");
    static STRUCT_IF_C BFu31i_S_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_S_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_S_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_Us");
    check_field_offset(lv, v2, 4, "BFu31i_S_Us.v2");
    check_field_offset(lv, v3, 6, "BFu31i_S_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_Us, BFu31i_S_Us)
//============================================================================


struct  BFu31i_S_Vp  {
  unsigned int v1:31;
  short v2;
  void *v3;
};
//SIG(1 BFu31i_S_Vp) C1{ Fi:31 Fs Fp}



static void Test_BFu31i_S_Vp()
{
  {
    init_simple_test("BFu31i_S_Vp");
    static STRUCT_IF_C BFu31i_S_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_S_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_S_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_Vp");
    check_field_offset(lv, v2, 4, "BFu31i_S_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu31i_S_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_S_Vp, BFu31i_S_Vp)
//============================================================================


struct  BFu31i_Uc  {
  unsigned int v1:31;
  unsigned char v2;
};
//SIG(1 BFu31i_Uc) C1{ Fi:31 Fc}



static void Test_BFu31i_Uc()
{
  {
    init_simple_test("BFu31i_Uc");
    static STRUCT_IF_C BFu31i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc");
    check_field_offset(lv, v2, 4, "BFu31i_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc, BFu31i_Uc)
//============================================================================


struct  BFu31i_Uc_BFu15i  {
  unsigned int v1:31;
  unsigned char v2;
  unsigned int v3:15;
};
//SIG(1 BFu31i_Uc_BFu15i) C1{ Fi:31 Fc Fi:15}



static void Test_BFu31i_Uc_BFu15i()
{
  {
    init_simple_test("BFu31i_Uc_BFu15i");
    static STRUCT_IF_C BFu31i_Uc_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Uc_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu15i");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_BFu15i.v2");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu31i_Uc_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu31i_Uc_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_BFu15i, BFu31i_Uc_BFu15i)
//============================================================================


struct  BFu31i_Uc_BFu15ll  {
  unsigned int v1:31;
  unsigned char v2;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_Uc_BFu15ll) C1{ Fi:31 Fc FL:15}



static void Test_BFu31i_Uc_BFu15ll()
{
  {
    init_simple_test("BFu31i_Uc_BFu15ll");
    static STRUCT_IF_C BFu31i_Uc_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Uc_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_BFu15ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu31i_Uc_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu31i_Uc_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_BFu15ll, BFu31i_Uc_BFu15ll)
//============================================================================


struct  BFu31i_Uc_BFu15s  {
  unsigned int v1:31;
  unsigned char v2;
  unsigned short v3:15;
};
//SIG(1 BFu31i_Uc_BFu15s) C1{ Fi:31 Fc Fs:15}



static void Test_BFu31i_Uc_BFu15s()
{
  {
    init_simple_test("BFu31i_Uc_BFu15s");
    static STRUCT_IF_C BFu31i_Uc_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Uc_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu15s");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_BFu15s.v2");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_Uc_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_Uc_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_BFu15s, BFu31i_Uc_BFu15s)
//============================================================================


struct  BFu31i_Uc_BFu16i  {
  unsigned int v1:31;
  unsigned char v2;
  unsigned int v3:16;
};
//SIG(1 BFu31i_Uc_BFu16i) C1{ Fi:31 Fc Fi:16}



static void Test_BFu31i_Uc_BFu16i()
{
  {
    init_simple_test("BFu31i_Uc_BFu16i");
    static STRUCT_IF_C BFu31i_Uc_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Uc_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu16i");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_BFu16i.v2");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu31i_Uc_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu31i_Uc_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_BFu16i, BFu31i_Uc_BFu16i)
//============================================================================


struct  BFu31i_Uc_BFu16ll  {
  unsigned int v1:31;
  unsigned char v2;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_Uc_BFu16ll) C1{ Fi:31 Fc FL:16}



static void Test_BFu31i_Uc_BFu16ll()
{
  {
    init_simple_test("BFu31i_Uc_BFu16ll");
    static STRUCT_IF_C BFu31i_Uc_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Uc_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_BFu16ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu31i_Uc_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu31i_Uc_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_BFu16ll, BFu31i_Uc_BFu16ll)
//============================================================================


struct  BFu31i_Uc_BFu16s  {
  unsigned int v1:31;
  unsigned char v2;
  unsigned short v3:16;
};
//SIG(1 BFu31i_Uc_BFu16s) C1{ Fi:31 Fc Fs:16}



static void Test_BFu31i_Uc_BFu16s()
{
  {
    init_simple_test("BFu31i_Uc_BFu16s");
    static STRUCT_IF_C BFu31i_Uc_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Uc_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu16s");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_BFu16s.v2");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_Uc_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_Uc_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_BFu16s, BFu31i_Uc_BFu16s)
//============================================================================


struct  BFu31i_Uc_BFu17i  {
  unsigned int v1:31;
  unsigned char v2;
  unsigned int v3:17;
};
//SIG(1 BFu31i_Uc_BFu17i) C1{ Fi:31 Fc Fi:17}



static void Test_BFu31i_Uc_BFu17i()
{
  {
    init_simple_test("BFu31i_Uc_BFu17i");
    static STRUCT_IF_C BFu31i_Uc_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Uc_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu17i");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_BFu17i.v2");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu31i_Uc_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu31i_Uc_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_BFu17i, BFu31i_Uc_BFu17i)
//============================================================================


struct  BFu31i_Uc_BFu17ll  {
  unsigned int v1:31;
  unsigned char v2;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_Uc_BFu17ll) C1{ Fi:31 Fc FL:17}



static void Test_BFu31i_Uc_BFu17ll()
{
  {
    init_simple_test("BFu31i_Uc_BFu17ll");
    static STRUCT_IF_C BFu31i_Uc_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Uc_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_BFu17ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu31i_Uc_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu31i_Uc_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_BFu17ll, BFu31i_Uc_BFu17ll)
//============================================================================


struct  BFu31i_Uc_BFu1c  {
  unsigned int v1:31;
  unsigned char v2;
  unsigned char v3:1;
};
//SIG(1 BFu31i_Uc_BFu1c) C1{ Fi:31 Fc Fc:1}



static void Test_BFu31i_Uc_BFu1c()
{
  {
    init_simple_test("BFu31i_Uc_BFu1c");
    static STRUCT_IF_C BFu31i_Uc_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Uc_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu1c");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_BFu1c.v2");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31i_Uc_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_BFu1c, BFu31i_Uc_BFu1c)
//============================================================================


struct  BFu31i_Uc_BFu1i  {
  unsigned int v1:31;
  unsigned char v2;
  unsigned int v3:1;
};
//SIG(1 BFu31i_Uc_BFu1i) C1{ Fi:31 Fc Fi:1}



static void Test_BFu31i_Uc_BFu1i()
{
  {
    init_simple_test("BFu31i_Uc_BFu1i");
    static STRUCT_IF_C BFu31i_Uc_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Uc_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu1i");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_BFu1i.v2");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31i_Uc_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_BFu1i, BFu31i_Uc_BFu1i)
//============================================================================


struct  BFu31i_Uc_BFu1ll  {
  unsigned int v1:31;
  unsigned char v2;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_Uc_BFu1ll) C1{ Fi:31 Fc FL:1}



static void Test_BFu31i_Uc_BFu1ll()
{
  {
    init_simple_test("BFu31i_Uc_BFu1ll");
    static STRUCT_IF_C BFu31i_Uc_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Uc_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_BFu1ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31i_Uc_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_BFu1ll, BFu31i_Uc_BFu1ll)
//============================================================================


struct  BFu31i_Uc_BFu1s  {
  unsigned int v1:31;
  unsigned char v2;
  unsigned short v3:1;
};
//SIG(1 BFu31i_Uc_BFu1s) C1{ Fi:31 Fc Fs:1}



static void Test_BFu31i_Uc_BFu1s()
{
  {
    init_simple_test("BFu31i_Uc_BFu1s");
    static STRUCT_IF_C BFu31i_Uc_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Uc_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu1s");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_BFu1s.v2");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31i_Uc_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_BFu1s, BFu31i_Uc_BFu1s)
//============================================================================


struct  BFu31i_Uc_BFu31i  {
  unsigned int v1:31;
  unsigned char v2;
  unsigned int v3:31;
};
//SIG(1 BFu31i_Uc_BFu31i) C1{ Fi:31 Fc Fi:31}



static void Test_BFu31i_Uc_BFu31i()
{
  {
    init_simple_test("BFu31i_Uc_BFu31i");
    static STRUCT_IF_C BFu31i_Uc_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Uc_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Uc_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu31i");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_Uc_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_BFu31i, BFu31i_Uc_BFu31i)
//============================================================================


struct  BFu31i_Uc_BFu31ll  {
  unsigned int v1:31;
  unsigned char v2;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_Uc_BFu31ll) C1{ Fi:31 Fc FL:31}



static void Test_BFu31i_Uc_BFu31ll()
{
  {
    init_simple_test("BFu31i_Uc_BFu31ll");
    static STRUCT_IF_C BFu31i_Uc_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_Uc_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Uc_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, 1, "BFu31i_Uc_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_BFu31ll, BFu31i_Uc_BFu31ll)
//============================================================================


struct  BFu31i_Uc_BFu32i  {
  unsigned int v1:31;
  unsigned char v2;
  unsigned int v3:32;
};
//SIG(1 BFu31i_Uc_BFu32i) C1{ Fi:31 Fc Fi:32}



static void Test_BFu31i_Uc_BFu32i()
{
  {
    init_simple_test("BFu31i_Uc_BFu32i");
    static STRUCT_IF_C BFu31i_Uc_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Uc_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Uc_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu32i");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_Uc_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_Uc_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_BFu32i, BFu31i_Uc_BFu32i)
//============================================================================


struct  BFu31i_Uc_BFu32ll  {
  unsigned int v1:31;
  unsigned char v2;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_Uc_BFu32ll) C1{ Fi:31 Fc FL:32}



static void Test_BFu31i_Uc_BFu32ll()
{
  {
    init_simple_test("BFu31i_Uc_BFu32ll");
    static STRUCT_IF_C BFu31i_Uc_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_Uc_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Uc_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, 1, "BFu31i_Uc_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, hide_ull(1LL<<31), "BFu31i_Uc_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_BFu32ll, BFu31i_Uc_BFu32ll)
//============================================================================


struct  BFu31i_Uc_BFu33  {
  unsigned int v1:31;
  unsigned char v2;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_Uc_BFu33) C1{ Fi:31 Fc FL:33}



static void Test_BFu31i_Uc_BFu33()
{
  {
    init_simple_test("BFu31i_Uc_BFu33");
    static STRUCT_IF_C BFu31i_Uc_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_Uc_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Uc_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu33");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, 1, "BFu31i_Uc_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, hide_ull(1LL<<32), "BFu31i_Uc_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_BFu33, BFu31i_Uc_BFu33)
//============================================================================


struct  BFu31i_Uc_BFu7c  {
  unsigned int v1:31;
  unsigned char v2;
  unsigned char v3:7;
};
//SIG(1 BFu31i_Uc_BFu7c) C1{ Fi:31 Fc Fc:7}



static void Test_BFu31i_Uc_BFu7c()
{
  {
    init_simple_test("BFu31i_Uc_BFu7c");
    static STRUCT_IF_C BFu31i_Uc_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Uc_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu7c");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_BFu7c.v2");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_Uc_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_Uc_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_BFu7c, BFu31i_Uc_BFu7c)
//============================================================================


struct  BFu31i_Uc_BFu7i  {
  unsigned int v1:31;
  unsigned char v2;
  unsigned int v3:7;
};
//SIG(1 BFu31i_Uc_BFu7i) C1{ Fi:31 Fc Fi:7}



static void Test_BFu31i_Uc_BFu7i()
{
  {
    init_simple_test("BFu31i_Uc_BFu7i");
    static STRUCT_IF_C BFu31i_Uc_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Uc_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu7i");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_BFu7i.v2");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_Uc_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_Uc_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_BFu7i, BFu31i_Uc_BFu7i)
//============================================================================


struct  BFu31i_Uc_BFu7ll  {
  unsigned int v1:31;
  unsigned char v2;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_Uc_BFu7ll) C1{ Fi:31 Fc FL:7}



static void Test_BFu31i_Uc_BFu7ll()
{
  {
    init_simple_test("BFu31i_Uc_BFu7ll");
    static STRUCT_IF_C BFu31i_Uc_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Uc_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_BFu7ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_Uc_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_Uc_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_BFu7ll, BFu31i_Uc_BFu7ll)
//============================================================================


struct  BFu31i_Uc_BFu7s  {
  unsigned int v1:31;
  unsigned char v2;
  unsigned short v3:7;
};
//SIG(1 BFu31i_Uc_BFu7s) C1{ Fi:31 Fc Fs:7}



static void Test_BFu31i_Uc_BFu7s()
{
  {
    init_simple_test("BFu31i_Uc_BFu7s");
    static STRUCT_IF_C BFu31i_Uc_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Uc_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu7s");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_BFu7s.v2");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_Uc_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_Uc_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_BFu7s, BFu31i_Uc_BFu7s)
//============================================================================


struct  BFu31i_Uc_BFu8c  {
  unsigned int v1:31;
  unsigned char v2;
  unsigned char v3:8;
};
//SIG(1 BFu31i_Uc_BFu8c) C1{ Fi:31 Fc Fc:8}



static void Test_BFu31i_Uc_BFu8c()
{
  {
    init_simple_test("BFu31i_Uc_BFu8c");
    static STRUCT_IF_C BFu31i_Uc_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Uc_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu8c");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_BFu8c.v2");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_Uc_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_Uc_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_BFu8c, BFu31i_Uc_BFu8c)
//============================================================================


struct  BFu31i_Uc_BFu8i  {
  unsigned int v1:31;
  unsigned char v2;
  unsigned int v3:8;
};
//SIG(1 BFu31i_Uc_BFu8i) C1{ Fi:31 Fc Fi:8}



static void Test_BFu31i_Uc_BFu8i()
{
  {
    init_simple_test("BFu31i_Uc_BFu8i");
    static STRUCT_IF_C BFu31i_Uc_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Uc_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu8i");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_BFu8i.v2");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_Uc_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_Uc_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_BFu8i, BFu31i_Uc_BFu8i)
//============================================================================


struct  BFu31i_Uc_BFu8ll  {
  unsigned int v1:31;
  unsigned char v2;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_Uc_BFu8ll) C1{ Fi:31 Fc FL:8}



static void Test_BFu31i_Uc_BFu8ll()
{
  {
    init_simple_test("BFu31i_Uc_BFu8ll");
    static STRUCT_IF_C BFu31i_Uc_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Uc_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_BFu8ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_Uc_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_Uc_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_BFu8ll, BFu31i_Uc_BFu8ll)
//============================================================================


struct  BFu31i_Uc_BFu8s  {
  unsigned int v1:31;
  unsigned char v2;
  unsigned short v3:8;
};
//SIG(1 BFu31i_Uc_BFu8s) C1{ Fi:31 Fc Fs:8}



static void Test_BFu31i_Uc_BFu8s()
{
  {
    init_simple_test("BFu31i_Uc_BFu8s");
    static STRUCT_IF_C BFu31i_Uc_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Uc_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu8s");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_BFu8s.v2");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_Uc_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_Uc_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_BFu8s, BFu31i_Uc_BFu8s)
//============================================================================


struct  BFu31i_Uc_BFu9i  {
  unsigned int v1:31;
  unsigned char v2;
  unsigned int v3:9;
};
//SIG(1 BFu31i_Uc_BFu9i) C1{ Fi:31 Fc Fi:9}



static void Test_BFu31i_Uc_BFu9i()
{
  {
    init_simple_test("BFu31i_Uc_BFu9i");
    static STRUCT_IF_C BFu31i_Uc_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Uc_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu9i");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_BFu9i.v2");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu31i_Uc_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu31i_Uc_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_BFu9i, BFu31i_Uc_BFu9i)
//============================================================================


struct  BFu31i_Uc_BFu9ll  {
  unsigned int v1:31;
  unsigned char v2;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_Uc_BFu9ll) C1{ Fi:31 Fc FL:9}



static void Test_BFu31i_Uc_BFu9ll()
{
  {
    init_simple_test("BFu31i_Uc_BFu9ll");
    static STRUCT_IF_C BFu31i_Uc_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Uc_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_BFu9ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu31i_Uc_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu31i_Uc_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_BFu9ll, BFu31i_Uc_BFu9ll)
//============================================================================


struct  BFu31i_Uc_BFu9s  {
  unsigned int v1:31;
  unsigned char v2;
  unsigned short v3:9;
};
//SIG(1 BFu31i_Uc_BFu9s) C1{ Fi:31 Fc Fs:9}



static void Test_BFu31i_Uc_BFu9s()
{
  {
    init_simple_test("BFu31i_Uc_BFu9s");
    static STRUCT_IF_C BFu31i_Uc_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Uc_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_BFu9s");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_BFu9s.v2");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31i_Uc_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31i_Uc_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_BFu9s, BFu31i_Uc_BFu9s)
//============================================================================


struct  BFu31i_Uc_C  {
  unsigned int v1:31;
  unsigned char v2;
  char v3;
};
//SIG(1 BFu31i_Uc_C) C1{ Fi:31 Fc[2]}



static void Test_BFu31i_Uc_C()
{
  {
    init_simple_test("BFu31i_Uc_C");
    static STRUCT_IF_C BFu31i_Uc_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Uc_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_C");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_C.v2");
    check_field_offset(lv, v3, 5, "BFu31i_Uc_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_C, BFu31i_Uc_C)
//============================================================================


struct  BFu31i_Uc_D  {
  unsigned int v1:31;
  unsigned char v2;
  double v3;
};
//SIG(1 BFu31i_Uc_D) C1{ Fi:31 Fc FL}



static void Test_BFu31i_Uc_D()
{
  {
    init_simple_test("BFu31i_Uc_D");
    static STRUCT_IF_C BFu31i_Uc_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_Uc_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Uc_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_D");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_D.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Uc_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_D, BFu31i_Uc_D)
//============================================================================


struct  BFu31i_Uc_F  {
  unsigned int v1:31;
  unsigned char v2;
  float v3;
};
//SIG(1 BFu31i_Uc_F) C1{ Fi:31 Fc Fi}



static void Test_BFu31i_Uc_F()
{
  {
    init_simple_test("BFu31i_Uc_F");
    static STRUCT_IF_C BFu31i_Uc_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Uc_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Uc_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_F");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_F.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Uc_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_F, BFu31i_Uc_F)
//============================================================================


struct  BFu31i_Uc_I  {
  unsigned int v1:31;
  unsigned char v2;
  int v3;
};
//SIG(1 BFu31i_Uc_I) C1{ Fi:31 Fc Fi}



static void Test_BFu31i_Uc_I()
{
  {
    init_simple_test("BFu31i_Uc_I");
    static STRUCT_IF_C BFu31i_Uc_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Uc_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Uc_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_I");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_I.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Uc_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_I, BFu31i_Uc_I)
//============================================================================


struct  BFu31i_Uc_Ip  {
  unsigned int v1:31;
  unsigned char v2;
  int *v3;
};
//SIG(1 BFu31i_Uc_Ip) C1{ Fi:31 Fc Fp}



static void Test_BFu31i_Uc_Ip()
{
  {
    init_simple_test("BFu31i_Uc_Ip");
    static STRUCT_IF_C BFu31i_Uc_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_Uc_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Uc_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_Ip");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Uc_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_Ip, BFu31i_Uc_Ip)
//============================================================================


struct  BFu31i_Uc_L  {
  unsigned int v1:31;
  unsigned char v2;
  __tsi64 v3;
};
//SIG(1 BFu31i_Uc_L) C1{ Fi:31 Fc FL}



static void Test_BFu31i_Uc_L()
{
  {
    init_simple_test("BFu31i_Uc_L");
    static STRUCT_IF_C BFu31i_Uc_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_Uc_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Uc_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_L");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_L.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Uc_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_L, BFu31i_Uc_L)
//============================================================================


struct  BFu31i_Uc_S  {
  unsigned int v1:31;
  unsigned char v2;
  short v3;
};
//SIG(1 BFu31i_Uc_S) C1{ Fi:31 Fc Fs}



static void Test_BFu31i_Uc_S()
{
  {
    init_simple_test("BFu31i_Uc_S");
    static STRUCT_IF_C BFu31i_Uc_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Uc_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_S");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_S.v2");
    check_field_offset(lv, v3, 6, "BFu31i_Uc_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_S, BFu31i_Uc_S)
//============================================================================


struct  BFu31i_Uc_Uc  {
  unsigned int v1:31;
  unsigned char v2;
  unsigned char v3;
};
//SIG(1 BFu31i_Uc_Uc) C1{ Fi:31 Fc[2]}



static void Test_BFu31i_Uc_Uc()
{
  {
    init_simple_test("BFu31i_Uc_Uc");
    static STRUCT_IF_C BFu31i_Uc_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Uc_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_Uc");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_Uc.v2");
    check_field_offset(lv, v3, 5, "BFu31i_Uc_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_Uc, BFu31i_Uc_Uc)
//============================================================================


struct  BFu31i_Uc_Ui  {
  unsigned int v1:31;
  unsigned char v2;
  unsigned int v3;
};
//SIG(1 BFu31i_Uc_Ui) C1{ Fi:31 Fc Fi}



static void Test_BFu31i_Uc_Ui()
{
  {
    init_simple_test("BFu31i_Uc_Ui");
    static STRUCT_IF_C BFu31i_Uc_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Uc_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Uc_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_Ui");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Uc_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_Ui, BFu31i_Uc_Ui)
//============================================================================


struct  BFu31i_Uc_Ul  {
  unsigned int v1:31;
  unsigned char v2;
  __tsu64 v3;
};
//SIG(1 BFu31i_Uc_Ul) C1{ Fi:31 Fc FL}



static void Test_BFu31i_Uc_Ul()
{
  {
    init_simple_test("BFu31i_Uc_Ul");
    static STRUCT_IF_C BFu31i_Uc_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_Uc_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Uc_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_Ul");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Uc_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_Ul, BFu31i_Uc_Ul)
//============================================================================


struct  BFu31i_Uc_Us  {
  unsigned int v1:31;
  unsigned char v2;
  unsigned short v3;
};
//SIG(1 BFu31i_Uc_Us) C1{ Fi:31 Fc Fs}



static void Test_BFu31i_Uc_Us()
{
  {
    init_simple_test("BFu31i_Uc_Us");
    static STRUCT_IF_C BFu31i_Uc_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Uc_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_Us");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_Us.v2");
    check_field_offset(lv, v3, 6, "BFu31i_Uc_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_Us, BFu31i_Uc_Us)
//============================================================================


struct  BFu31i_Uc_Vp  {
  unsigned int v1:31;
  unsigned char v2;
  void *v3;
};
//SIG(1 BFu31i_Uc_Vp) C1{ Fi:31 Fc Fp}



static void Test_BFu31i_Uc_Vp()
{
  {
    init_simple_test("BFu31i_Uc_Vp");
    static STRUCT_IF_C BFu31i_Uc_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_Uc_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Uc_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_Vp");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Uc_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Uc_Vp, BFu31i_Uc_Vp)
//============================================================================


struct  BFu31i_Ui  {
  unsigned int v1:31;
  unsigned int v2;
};
//SIG(1 BFu31i_Ui) C1{ Fi:31 Fi}



static void Test_BFu31i_Ui()
{
  {
    init_simple_test("BFu31i_Ui");
    static STRUCT_IF_C BFu31i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui");
    check_field_offset(lv, v2, 4, "BFu31i_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui, BFu31i_Ui)
//============================================================================


struct  BFu31i_Ui_BFu15i  {
  unsigned int v1:31;
  unsigned int v2;
  unsigned int v3:15;
};
//SIG(1 BFu31i_Ui_BFu15i) C1{ Fi:31 Fi Fi:15}



static void Test_BFu31i_Ui_BFu15i()
{
  {
    init_simple_test("BFu31i_Ui_BFu15i");
    static STRUCT_IF_C BFu31i_Ui_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Ui_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Ui_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu15i");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31i_Ui_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31i_Ui_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_BFu15i, BFu31i_Ui_BFu15i)
//============================================================================


struct  BFu31i_Ui_BFu15ll  {
  unsigned int v1:31;
  unsigned int v2;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_Ui_BFu15ll) C1{ Fi:31 Fi FL:15}



static void Test_BFu31i_Ui_BFu15ll()
{
  {
    init_simple_test("BFu31i_Ui_BFu15ll");
    static STRUCT_IF_C BFu31i_Ui_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_Ui_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ui_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31i_Ui_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31i_Ui_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_BFu15ll, BFu31i_Ui_BFu15ll)
//============================================================================


struct  BFu31i_Ui_BFu15s  {
  unsigned int v1:31;
  unsigned int v2;
  unsigned short v3:15;
};
//SIG(1 BFu31i_Ui_BFu15s) C1{ Fi:31 Fi Fs:15}



static void Test_BFu31i_Ui_BFu15s()
{
  {
    init_simple_test("BFu31i_Ui_BFu15s");
    static STRUCT_IF_C BFu31i_Ui_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Ui_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Ui_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu15s");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31i_Ui_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31i_Ui_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_BFu15s, BFu31i_Ui_BFu15s)
//============================================================================


struct  BFu31i_Ui_BFu16i  {
  unsigned int v1:31;
  unsigned int v2;
  unsigned int v3:16;
};
//SIG(1 BFu31i_Ui_BFu16i) C1{ Fi:31 Fi Fi:16}



static void Test_BFu31i_Ui_BFu16i()
{
  {
    init_simple_test("BFu31i_Ui_BFu16i");
    static STRUCT_IF_C BFu31i_Ui_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Ui_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Ui_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu16i");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31i_Ui_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31i_Ui_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_BFu16i, BFu31i_Ui_BFu16i)
//============================================================================


struct  BFu31i_Ui_BFu16ll  {
  unsigned int v1:31;
  unsigned int v2;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_Ui_BFu16ll) C1{ Fi:31 Fi FL:16}



static void Test_BFu31i_Ui_BFu16ll()
{
  {
    init_simple_test("BFu31i_Ui_BFu16ll");
    static STRUCT_IF_C BFu31i_Ui_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_Ui_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ui_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31i_Ui_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31i_Ui_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_BFu16ll, BFu31i_Ui_BFu16ll)
//============================================================================


struct  BFu31i_Ui_BFu16s  {
  unsigned int v1:31;
  unsigned int v2;
  unsigned short v3:16;
};
//SIG(1 BFu31i_Ui_BFu16s) C1{ Fi:31 Fi Fs:16}



static void Test_BFu31i_Ui_BFu16s()
{
  {
    init_simple_test("BFu31i_Ui_BFu16s");
    static STRUCT_IF_C BFu31i_Ui_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Ui_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Ui_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu16s");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31i_Ui_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31i_Ui_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_BFu16s, BFu31i_Ui_BFu16s)
//============================================================================


struct  BFu31i_Ui_BFu17i  {
  unsigned int v1:31;
  unsigned int v2;
  unsigned int v3:17;
};
//SIG(1 BFu31i_Ui_BFu17i) C1{ Fi:31 Fi Fi:17}



static void Test_BFu31i_Ui_BFu17i()
{
  {
    init_simple_test("BFu31i_Ui_BFu17i");
    static STRUCT_IF_C BFu31i_Ui_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Ui_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Ui_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu17i");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31i_Ui_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31i_Ui_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_BFu17i, BFu31i_Ui_BFu17i)
//============================================================================


struct  BFu31i_Ui_BFu17ll  {
  unsigned int v1:31;
  unsigned int v2;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_Ui_BFu17ll) C1{ Fi:31 Fi FL:17}



static void Test_BFu31i_Ui_BFu17ll()
{
  {
    init_simple_test("BFu31i_Ui_BFu17ll");
    static STRUCT_IF_C BFu31i_Ui_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_Ui_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ui_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31i_Ui_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31i_Ui_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_BFu17ll, BFu31i_Ui_BFu17ll)
//============================================================================


struct  BFu31i_Ui_BFu1c  {
  unsigned int v1:31;
  unsigned int v2;
  unsigned char v3:1;
};
//SIG(1 BFu31i_Ui_BFu1c) C1{ Fi:31 Fi Fc:1}



static void Test_BFu31i_Ui_BFu1c()
{
  {
    init_simple_test("BFu31i_Ui_BFu1c");
    static STRUCT_IF_C BFu31i_Ui_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Ui_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Ui_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu1c");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu31i_Ui_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_BFu1c, BFu31i_Ui_BFu1c)
//============================================================================


struct  BFu31i_Ui_BFu1i  {
  unsigned int v1:31;
  unsigned int v2;
  unsigned int v3:1;
};
//SIG(1 BFu31i_Ui_BFu1i) C1{ Fi:31 Fi Fi:1}



static void Test_BFu31i_Ui_BFu1i()
{
  {
    init_simple_test("BFu31i_Ui_BFu1i");
    static STRUCT_IF_C BFu31i_Ui_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Ui_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Ui_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu1i");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu31i_Ui_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_BFu1i, BFu31i_Ui_BFu1i)
//============================================================================


struct  BFu31i_Ui_BFu1ll  {
  unsigned int v1:31;
  unsigned int v2;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_Ui_BFu1ll) C1{ Fi:31 Fi FL:1}



static void Test_BFu31i_Ui_BFu1ll()
{
  {
    init_simple_test("BFu31i_Ui_BFu1ll");
    static STRUCT_IF_C BFu31i_Ui_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_Ui_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ui_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu31i_Ui_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_BFu1ll, BFu31i_Ui_BFu1ll)
//============================================================================


struct  BFu31i_Ui_BFu1s  {
  unsigned int v1:31;
  unsigned int v2;
  unsigned short v3:1;
};
//SIG(1 BFu31i_Ui_BFu1s) C1{ Fi:31 Fi Fs:1}



static void Test_BFu31i_Ui_BFu1s()
{
  {
    init_simple_test("BFu31i_Ui_BFu1s");
    static STRUCT_IF_C BFu31i_Ui_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Ui_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Ui_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu1s");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu31i_Ui_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_BFu1s, BFu31i_Ui_BFu1s)
//============================================================================


struct  BFu31i_Ui_BFu31i  {
  unsigned int v1:31;
  unsigned int v2;
  unsigned int v3:31;
};
//SIG(1 BFu31i_Ui_BFu31i) C1{ Fi:31 Fi Fi:31}



static void Test_BFu31i_Ui_BFu31i()
{
  {
    init_simple_test("BFu31i_Ui_BFu31i");
    static STRUCT_IF_C BFu31i_Ui_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Ui_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Ui_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu31i");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_Ui_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_BFu31i, BFu31i_Ui_BFu31i)
//============================================================================


struct  BFu31i_Ui_BFu31ll  {
  unsigned int v1:31;
  unsigned int v2;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_Ui_BFu31ll) C1{ Fi:31 Fi FL:31}



static void Test_BFu31i_Ui_BFu31ll()
{
  {
    init_simple_test("BFu31i_Ui_BFu31ll");
    static STRUCT_IF_C BFu31i_Ui_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_Ui_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ui_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_Ui_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_BFu31ll, BFu31i_Ui_BFu31ll)
//============================================================================


struct  BFu31i_Ui_BFu32i  {
  unsigned int v1:31;
  unsigned int v2;
  unsigned int v3:32;
};
//SIG(1 BFu31i_Ui_BFu32i) C1{ Fi:31 Fi Fi:32}



static void Test_BFu31i_Ui_BFu32i()
{
  {
    init_simple_test("BFu31i_Ui_BFu32i");
    static STRUCT_IF_C BFu31i_Ui_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Ui_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Ui_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu32i");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_Ui_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_Ui_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_BFu32i, BFu31i_Ui_BFu32i)
//============================================================================


struct  BFu31i_Ui_BFu32ll  {
  unsigned int v1:31;
  unsigned int v2;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_Ui_BFu32ll) C1{ Fi:31 Fi FL:32}



static void Test_BFu31i_Ui_BFu32ll()
{
  {
    init_simple_test("BFu31i_Ui_BFu32ll");
    static STRUCT_IF_C BFu31i_Ui_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_Ui_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ui_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_Ui_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_Ui_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_BFu32ll, BFu31i_Ui_BFu32ll)
//============================================================================


struct  BFu31i_Ui_BFu33  {
  unsigned int v1:31;
  unsigned int v2;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_Ui_BFu33) C1{ Fi:31 Fi FL:33}



static void Test_BFu31i_Ui_BFu33()
{
  {
    init_simple_test("BFu31i_Ui_BFu33");
    static STRUCT_IF_C BFu31i_Ui_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_Ui_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ui_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu33");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu31i_Ui_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu31i_Ui_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_BFu33, BFu31i_Ui_BFu33)
//============================================================================


struct  BFu31i_Ui_BFu7c  {
  unsigned int v1:31;
  unsigned int v2;
  unsigned char v3:7;
};
//SIG(1 BFu31i_Ui_BFu7c) C1{ Fi:31 Fi Fc:7}



static void Test_BFu31i_Ui_BFu7c()
{
  {
    init_simple_test("BFu31i_Ui_BFu7c");
    static STRUCT_IF_C BFu31i_Ui_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Ui_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Ui_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu7c");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_Ui_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_Ui_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_BFu7c, BFu31i_Ui_BFu7c)
//============================================================================


struct  BFu31i_Ui_BFu7i  {
  unsigned int v1:31;
  unsigned int v2;
  unsigned int v3:7;
};
//SIG(1 BFu31i_Ui_BFu7i) C1{ Fi:31 Fi Fi:7}



static void Test_BFu31i_Ui_BFu7i()
{
  {
    init_simple_test("BFu31i_Ui_BFu7i");
    static STRUCT_IF_C BFu31i_Ui_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Ui_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Ui_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu7i");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_Ui_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_Ui_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_BFu7i, BFu31i_Ui_BFu7i)
//============================================================================


struct  BFu31i_Ui_BFu7ll  {
  unsigned int v1:31;
  unsigned int v2;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_Ui_BFu7ll) C1{ Fi:31 Fi FL:7}



static void Test_BFu31i_Ui_BFu7ll()
{
  {
    init_simple_test("BFu31i_Ui_BFu7ll");
    static STRUCT_IF_C BFu31i_Ui_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_Ui_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ui_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_Ui_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_Ui_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_BFu7ll, BFu31i_Ui_BFu7ll)
//============================================================================


struct  BFu31i_Ui_BFu7s  {
  unsigned int v1:31;
  unsigned int v2;
  unsigned short v3:7;
};
//SIG(1 BFu31i_Ui_BFu7s) C1{ Fi:31 Fi Fs:7}



static void Test_BFu31i_Ui_BFu7s()
{
  {
    init_simple_test("BFu31i_Ui_BFu7s");
    static STRUCT_IF_C BFu31i_Ui_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Ui_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Ui_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu7s");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31i_Ui_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31i_Ui_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_BFu7s, BFu31i_Ui_BFu7s)
//============================================================================


struct  BFu31i_Ui_BFu8c  {
  unsigned int v1:31;
  unsigned int v2;
  unsigned char v3:8;
};
//SIG(1 BFu31i_Ui_BFu8c) C1{ Fi:31 Fi Fc:8}



static void Test_BFu31i_Ui_BFu8c()
{
  {
    init_simple_test("BFu31i_Ui_BFu8c");
    static STRUCT_IF_C BFu31i_Ui_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Ui_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Ui_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu8c");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_Ui_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_Ui_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_BFu8c, BFu31i_Ui_BFu8c)
//============================================================================


struct  BFu31i_Ui_BFu8i  {
  unsigned int v1:31;
  unsigned int v2;
  unsigned int v3:8;
};
//SIG(1 BFu31i_Ui_BFu8i) C1{ Fi:31 Fi Fi:8}



static void Test_BFu31i_Ui_BFu8i()
{
  {
    init_simple_test("BFu31i_Ui_BFu8i");
    static STRUCT_IF_C BFu31i_Ui_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Ui_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Ui_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu8i");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_Ui_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_Ui_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_BFu8i, BFu31i_Ui_BFu8i)
//============================================================================


struct  BFu31i_Ui_BFu8ll  {
  unsigned int v1:31;
  unsigned int v2;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_Ui_BFu8ll) C1{ Fi:31 Fi FL:8}



static void Test_BFu31i_Ui_BFu8ll()
{
  {
    init_simple_test("BFu31i_Ui_BFu8ll");
    static STRUCT_IF_C BFu31i_Ui_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_Ui_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ui_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_Ui_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_Ui_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_BFu8ll, BFu31i_Ui_BFu8ll)
//============================================================================


struct  BFu31i_Ui_BFu8s  {
  unsigned int v1:31;
  unsigned int v2;
  unsigned short v3:8;
};
//SIG(1 BFu31i_Ui_BFu8s) C1{ Fi:31 Fi Fs:8}



static void Test_BFu31i_Ui_BFu8s()
{
  {
    init_simple_test("BFu31i_Ui_BFu8s");
    static STRUCT_IF_C BFu31i_Ui_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Ui_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Ui_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu8s");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31i_Ui_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31i_Ui_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_BFu8s, BFu31i_Ui_BFu8s)
//============================================================================


struct  BFu31i_Ui_BFu9i  {
  unsigned int v1:31;
  unsigned int v2;
  unsigned int v3:9;
};
//SIG(1 BFu31i_Ui_BFu9i) C1{ Fi:31 Fi Fi:9}



static void Test_BFu31i_Ui_BFu9i()
{
  {
    init_simple_test("BFu31i_Ui_BFu9i");
    static STRUCT_IF_C BFu31i_Ui_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Ui_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Ui_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu9i");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31i_Ui_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31i_Ui_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_BFu9i, BFu31i_Ui_BFu9i)
//============================================================================


struct  BFu31i_Ui_BFu9ll  {
  unsigned int v1:31;
  unsigned int v2;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_Ui_BFu9ll) C1{ Fi:31 Fi FL:9}



static void Test_BFu31i_Ui_BFu9ll()
{
  {
    init_simple_test("BFu31i_Ui_BFu9ll");
    static STRUCT_IF_C BFu31i_Ui_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_Ui_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ui_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31i_Ui_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31i_Ui_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_BFu9ll, BFu31i_Ui_BFu9ll)
//============================================================================


struct  BFu31i_Ui_BFu9s  {
  unsigned int v1:31;
  unsigned int v2;
  unsigned short v3:9;
};
//SIG(1 BFu31i_Ui_BFu9s) C1{ Fi:31 Fi Fs:9}



static void Test_BFu31i_Ui_BFu9s()
{
  {
    init_simple_test("BFu31i_Ui_BFu9s");
    static STRUCT_IF_C BFu31i_Ui_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Ui_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Ui_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_BFu9s");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31i_Ui_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31i_Ui_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_BFu9s, BFu31i_Ui_BFu9s)
//============================================================================


struct  BFu31i_Ui_C  {
  unsigned int v1:31;
  unsigned int v2;
  char v3;
};
//SIG(1 BFu31i_Ui_C) C1{ Fi:31 Fi Fc}



static void Test_BFu31i_Ui_C()
{
  {
    init_simple_test("BFu31i_Ui_C");
    static STRUCT_IF_C BFu31i_Ui_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Ui_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Ui_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_C");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_C.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Ui_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_C, BFu31i_Ui_C)
//============================================================================


struct  BFu31i_Ui_D  {
  unsigned int v1:31;
  unsigned int v2;
  double v3;
};
//SIG(1 BFu31i_Ui_D) C1{ Fi:31 Fi FL}



static void Test_BFu31i_Ui_D()
{
  {
    init_simple_test("BFu31i_Ui_D");
    static STRUCT_IF_C BFu31i_Ui_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_Ui_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ui_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_D");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_D.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Ui_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_D, BFu31i_Ui_D)
//============================================================================


struct  BFu31i_Ui_F  {
  unsigned int v1:31;
  unsigned int v2;
  float v3;
};
//SIG(1 BFu31i_Ui_F) C1{ Fi:31 Fi[2]}



static void Test_BFu31i_Ui_F()
{
  {
    init_simple_test("BFu31i_Ui_F");
    static STRUCT_IF_C BFu31i_Ui_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Ui_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Ui_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_F");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_F.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Ui_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_F, BFu31i_Ui_F)
//============================================================================


struct  BFu31i_Ui_I  {
  unsigned int v1:31;
  unsigned int v2;
  int v3;
};
//SIG(1 BFu31i_Ui_I) C1{ Fi:31 Fi[2]}



static void Test_BFu31i_Ui_I()
{
  {
    init_simple_test("BFu31i_Ui_I");
    static STRUCT_IF_C BFu31i_Ui_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Ui_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Ui_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_I");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_I.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Ui_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_I, BFu31i_Ui_I)
//============================================================================


struct  BFu31i_Ui_Ip  {
  unsigned int v1:31;
  unsigned int v2;
  int *v3;
};
//SIG(1 BFu31i_Ui_Ip) C1{ Fi:31 Fi Fp}



static void Test_BFu31i_Ui_Ip()
{
  {
    init_simple_test("BFu31i_Ui_Ip");
    static STRUCT_IF_C BFu31i_Ui_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_Ui_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ui_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_Ip");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Ui_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_Ip, BFu31i_Ui_Ip)
//============================================================================


struct  BFu31i_Ui_L  {
  unsigned int v1:31;
  unsigned int v2;
  __tsi64 v3;
};
//SIG(1 BFu31i_Ui_L) C1{ Fi:31 Fi FL}



static void Test_BFu31i_Ui_L()
{
  {
    init_simple_test("BFu31i_Ui_L");
    static STRUCT_IF_C BFu31i_Ui_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_Ui_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ui_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_L");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_L.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Ui_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_L, BFu31i_Ui_L)
//============================================================================


struct  BFu31i_Ui_S  {
  unsigned int v1:31;
  unsigned int v2;
  short v3;
};
//SIG(1 BFu31i_Ui_S) C1{ Fi:31 Fi Fs}



static void Test_BFu31i_Ui_S()
{
  {
    init_simple_test("BFu31i_Ui_S");
    static STRUCT_IF_C BFu31i_Ui_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Ui_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Ui_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_S");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_S.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Ui_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_S, BFu31i_Ui_S)
//============================================================================


struct  BFu31i_Ui_Uc  {
  unsigned int v1:31;
  unsigned int v2;
  unsigned char v3;
};
//SIG(1 BFu31i_Ui_Uc) C1{ Fi:31 Fi Fc}



static void Test_BFu31i_Ui_Uc()
{
  {
    init_simple_test("BFu31i_Ui_Uc");
    static STRUCT_IF_C BFu31i_Ui_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Ui_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Ui_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_Uc");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Ui_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_Uc, BFu31i_Ui_Uc)
//============================================================================


struct  BFu31i_Ui_Ui  {
  unsigned int v1:31;
  unsigned int v2;
  unsigned int v3;
};
//SIG(1 BFu31i_Ui_Ui) C1{ Fi:31 Fi[2]}



static void Test_BFu31i_Ui_Ui()
{
  {
    init_simple_test("BFu31i_Ui_Ui");
    static STRUCT_IF_C BFu31i_Ui_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Ui_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Ui_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_Ui");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Ui_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_Ui, BFu31i_Ui_Ui)
//============================================================================


struct  BFu31i_Ui_Ul  {
  unsigned int v1:31;
  unsigned int v2;
  __tsu64 v3;
};
//SIG(1 BFu31i_Ui_Ul) C1{ Fi:31 Fi FL}



static void Test_BFu31i_Ui_Ul()
{
  {
    init_simple_test("BFu31i_Ui_Ul");
    static STRUCT_IF_C BFu31i_Ui_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_Ui_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ui_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_Ul");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Ui_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_Ul, BFu31i_Ui_Ul)
//============================================================================


struct  BFu31i_Ui_Us  {
  unsigned int v1:31;
  unsigned int v2;
  unsigned short v3;
};
//SIG(1 BFu31i_Ui_Us) C1{ Fi:31 Fi Fs}



static void Test_BFu31i_Ui_Us()
{
  {
    init_simple_test("BFu31i_Ui_Us");
    static STRUCT_IF_C BFu31i_Ui_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Ui_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Ui_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_Us");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_Us.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Ui_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_Us, BFu31i_Ui_Us)
//============================================================================


struct  BFu31i_Ui_Vp  {
  unsigned int v1:31;
  unsigned int v2;
  void *v3;
};
//SIG(1 BFu31i_Ui_Vp) C1{ Fi:31 Fi Fp}



static void Test_BFu31i_Ui_Vp()
{
  {
    init_simple_test("BFu31i_Ui_Vp");
    static STRUCT_IF_C BFu31i_Ui_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_Ui_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ui_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_Vp");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Ui_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ui_Vp, BFu31i_Ui_Vp)
//============================================================================


struct  BFu31i_Ul  {
  unsigned int v1:31;
  __tsu64 v2;
};
//SIG(1 BFu31i_Ul) C1{ Fi:31 FL}



static void Test_BFu31i_Ul()
{
  {
    init_simple_test("BFu31i_Ul");
    static STRUCT_IF_C BFu31i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul, BFu31i_Ul)
//============================================================================


struct  BFu31i_Ul_BFu15i  {
  unsigned int v1:31;
  __tsu64 v2;
  unsigned int v3:15;
};
//SIG(1 BFu31i_Ul_BFu15i) C1{ Fi:31 FL Fi:15}



static void Test_BFu31i_Ul_BFu15i()
{
  {
    init_simple_test("BFu31i_Ul_BFu15i");
    static STRUCT_IF_C BFu31i_Ul_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu31i_Ul_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu31i_Ul_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_BFu15i, BFu31i_Ul_BFu15i)
//============================================================================


struct  BFu31i_Ul_BFu15ll  {
  unsigned int v1:31;
  __tsu64 v2;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_Ul_BFu15ll) C1{ Fi:31 FL FL:15}



static void Test_BFu31i_Ul_BFu15ll()
{
  {
    init_simple_test("BFu31i_Ul_BFu15ll");
    static STRUCT_IF_C BFu31i_Ul_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu31i_Ul_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu31i_Ul_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_BFu15ll, BFu31i_Ul_BFu15ll)
//============================================================================


struct  BFu31i_Ul_BFu15s  {
  unsigned int v1:31;
  __tsu64 v2;
  unsigned short v3:15;
};
//SIG(1 BFu31i_Ul_BFu15s) C1{ Fi:31 FL Fs:15}



static void Test_BFu31i_Ul_BFu15s()
{
  {
    init_simple_test("BFu31i_Ul_BFu15s");
    static STRUCT_IF_C BFu31i_Ul_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu31i_Ul_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu31i_Ul_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_BFu15s, BFu31i_Ul_BFu15s)
//============================================================================


struct  BFu31i_Ul_BFu16i  {
  unsigned int v1:31;
  __tsu64 v2;
  unsigned int v3:16;
};
//SIG(1 BFu31i_Ul_BFu16i) C1{ Fi:31 FL Fi:16}



static void Test_BFu31i_Ul_BFu16i()
{
  {
    init_simple_test("BFu31i_Ul_BFu16i");
    static STRUCT_IF_C BFu31i_Ul_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu31i_Ul_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu31i_Ul_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_BFu16i, BFu31i_Ul_BFu16i)
//============================================================================


struct  BFu31i_Ul_BFu16ll  {
  unsigned int v1:31;
  __tsu64 v2;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_Ul_BFu16ll) C1{ Fi:31 FL FL:16}



static void Test_BFu31i_Ul_BFu16ll()
{
  {
    init_simple_test("BFu31i_Ul_BFu16ll");
    static STRUCT_IF_C BFu31i_Ul_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu31i_Ul_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu31i_Ul_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_BFu16ll, BFu31i_Ul_BFu16ll)
//============================================================================


struct  BFu31i_Ul_BFu16s  {
  unsigned int v1:31;
  __tsu64 v2;
  unsigned short v3:16;
};
//SIG(1 BFu31i_Ul_BFu16s) C1{ Fi:31 FL Fs:16}



static void Test_BFu31i_Ul_BFu16s()
{
  {
    init_simple_test("BFu31i_Ul_BFu16s");
    static STRUCT_IF_C BFu31i_Ul_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu31i_Ul_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu31i_Ul_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_BFu16s, BFu31i_Ul_BFu16s)
//============================================================================


struct  BFu31i_Ul_BFu17i  {
  unsigned int v1:31;
  __tsu64 v2;
  unsigned int v3:17;
};
//SIG(1 BFu31i_Ul_BFu17i) C1{ Fi:31 FL Fi:17}



static void Test_BFu31i_Ul_BFu17i()
{
  {
    init_simple_test("BFu31i_Ul_BFu17i");
    static STRUCT_IF_C BFu31i_Ul_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu31i_Ul_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu31i_Ul_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_BFu17i, BFu31i_Ul_BFu17i)
//============================================================================


struct  BFu31i_Ul_BFu17ll  {
  unsigned int v1:31;
  __tsu64 v2;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_Ul_BFu17ll) C1{ Fi:31 FL FL:17}



static void Test_BFu31i_Ul_BFu17ll()
{
  {
    init_simple_test("BFu31i_Ul_BFu17ll");
    static STRUCT_IF_C BFu31i_Ul_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu31i_Ul_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu31i_Ul_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_BFu17ll, BFu31i_Ul_BFu17ll)
//============================================================================


struct  BFu31i_Ul_BFu1c  {
  unsigned int v1:31;
  __tsu64 v2;
  unsigned char v3:1;
};
//SIG(1 BFu31i_Ul_BFu1c) C1{ Fi:31 FL Fc:1}



static void Test_BFu31i_Ul_BFu1c()
{
  {
    init_simple_test("BFu31i_Ul_BFu1c");
    static STRUCT_IF_C BFu31i_Ul_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu31i_Ul_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_BFu1c, BFu31i_Ul_BFu1c)
//============================================================================


struct  BFu31i_Ul_BFu1i  {
  unsigned int v1:31;
  __tsu64 v2;
  unsigned int v3:1;
};
//SIG(1 BFu31i_Ul_BFu1i) C1{ Fi:31 FL Fi:1}



static void Test_BFu31i_Ul_BFu1i()
{
  {
    init_simple_test("BFu31i_Ul_BFu1i");
    static STRUCT_IF_C BFu31i_Ul_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu31i_Ul_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_BFu1i, BFu31i_Ul_BFu1i)
//============================================================================


struct  BFu31i_Ul_BFu1ll  {
  unsigned int v1:31;
  __tsu64 v2;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_Ul_BFu1ll) C1{ Fi:31 FL FL:1}



static void Test_BFu31i_Ul_BFu1ll()
{
  {
    init_simple_test("BFu31i_Ul_BFu1ll");
    static STRUCT_IF_C BFu31i_Ul_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu31i_Ul_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_BFu1ll, BFu31i_Ul_BFu1ll)
//============================================================================


struct  BFu31i_Ul_BFu1s  {
  unsigned int v1:31;
  __tsu64 v2;
  unsigned short v3:1;
};
//SIG(1 BFu31i_Ul_BFu1s) C1{ Fi:31 FL Fs:1}



static void Test_BFu31i_Ul_BFu1s()
{
  {
    init_simple_test("BFu31i_Ul_BFu1s");
    static STRUCT_IF_C BFu31i_Ul_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu31i_Ul_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_BFu1s, BFu31i_Ul_BFu1s)
//============================================================================


struct  BFu31i_Ul_BFu31i  {
  unsigned int v1:31;
  __tsu64 v2;
  unsigned int v3:31;
};
//SIG(1 BFu31i_Ul_BFu31i) C1{ Fi:31 FL Fi:31}



static void Test_BFu31i_Ul_BFu31i()
{
  {
    init_simple_test("BFu31i_Ul_BFu31i");
    static STRUCT_IF_C BFu31i_Ul_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu31i_Ul_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_BFu31i, BFu31i_Ul_BFu31i)
//============================================================================


struct  BFu31i_Ul_BFu31ll  {
  unsigned int v1:31;
  __tsu64 v2;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_Ul_BFu31ll) C1{ Fi:31 FL FL:31}



static void Test_BFu31i_Ul_BFu31ll()
{
  {
    init_simple_test("BFu31i_Ul_BFu31ll");
    static STRUCT_IF_C BFu31i_Ul_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu31i_Ul_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_BFu31ll, BFu31i_Ul_BFu31ll)
//============================================================================


struct  BFu31i_Ul_BFu32i  {
  unsigned int v1:31;
  __tsu64 v2;
  unsigned int v3:32;
};
//SIG(1 BFu31i_Ul_BFu32i) C1{ Fi:31 FL Fi:32}



static void Test_BFu31i_Ul_BFu32i()
{
  {
    init_simple_test("BFu31i_Ul_BFu32i");
    static STRUCT_IF_C BFu31i_Ul_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu31i_Ul_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu31i_Ul_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_BFu32i, BFu31i_Ul_BFu32i)
//============================================================================


struct  BFu31i_Ul_BFu32ll  {
  unsigned int v1:31;
  __tsu64 v2;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_Ul_BFu32ll) C1{ Fi:31 FL FL:32}



static void Test_BFu31i_Ul_BFu32ll()
{
  {
    init_simple_test("BFu31i_Ul_BFu32ll");
    static STRUCT_IF_C BFu31i_Ul_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu31i_Ul_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu31i_Ul_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_BFu32ll, BFu31i_Ul_BFu32ll)
//============================================================================


struct  BFu31i_Ul_BFu33  {
  unsigned int v1:31;
  __tsu64 v2;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_Ul_BFu33) C1{ Fi:31 FL FL:33}



static void Test_BFu31i_Ul_BFu33()
{
  {
    init_simple_test("BFu31i_Ul_BFu33");
    static STRUCT_IF_C BFu31i_Ul_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu31i_Ul_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu31i_Ul_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu31i_Ul_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_BFu33, BFu31i_Ul_BFu33)
//============================================================================


struct  BFu31i_Ul_BFu7c  {
  unsigned int v1:31;
  __tsu64 v2;
  unsigned char v3:7;
};
//SIG(1 BFu31i_Ul_BFu7c) C1{ Fi:31 FL Fc:7}



static void Test_BFu31i_Ul_BFu7c()
{
  {
    init_simple_test("BFu31i_Ul_BFu7c");
    static STRUCT_IF_C BFu31i_Ul_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu31i_Ul_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu31i_Ul_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_BFu7c, BFu31i_Ul_BFu7c)
//============================================================================


struct  BFu31i_Ul_BFu7i  {
  unsigned int v1:31;
  __tsu64 v2;
  unsigned int v3:7;
};
//SIG(1 BFu31i_Ul_BFu7i) C1{ Fi:31 FL Fi:7}



static void Test_BFu31i_Ul_BFu7i()
{
  {
    init_simple_test("BFu31i_Ul_BFu7i");
    static STRUCT_IF_C BFu31i_Ul_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu31i_Ul_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu31i_Ul_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_BFu7i, BFu31i_Ul_BFu7i)
//============================================================================


struct  BFu31i_Ul_BFu7ll  {
  unsigned int v1:31;
  __tsu64 v2;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_Ul_BFu7ll) C1{ Fi:31 FL FL:7}



static void Test_BFu31i_Ul_BFu7ll()
{
  {
    init_simple_test("BFu31i_Ul_BFu7ll");
    static STRUCT_IF_C BFu31i_Ul_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu31i_Ul_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu31i_Ul_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_BFu7ll, BFu31i_Ul_BFu7ll)
//============================================================================


struct  BFu31i_Ul_BFu7s  {
  unsigned int v1:31;
  __tsu64 v2;
  unsigned short v3:7;
};
//SIG(1 BFu31i_Ul_BFu7s) C1{ Fi:31 FL Fs:7}



static void Test_BFu31i_Ul_BFu7s()
{
  {
    init_simple_test("BFu31i_Ul_BFu7s");
    static STRUCT_IF_C BFu31i_Ul_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu31i_Ul_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu31i_Ul_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_BFu7s, BFu31i_Ul_BFu7s)
//============================================================================


struct  BFu31i_Ul_BFu8c  {
  unsigned int v1:31;
  __tsu64 v2;
  unsigned char v3:8;
};
//SIG(1 BFu31i_Ul_BFu8c) C1{ Fi:31 FL Fc:8}



static void Test_BFu31i_Ul_BFu8c()
{
  {
    init_simple_test("BFu31i_Ul_BFu8c");
    static STRUCT_IF_C BFu31i_Ul_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu31i_Ul_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu31i_Ul_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_BFu8c, BFu31i_Ul_BFu8c)
//============================================================================


struct  BFu31i_Ul_BFu8i  {
  unsigned int v1:31;
  __tsu64 v2;
  unsigned int v3:8;
};
//SIG(1 BFu31i_Ul_BFu8i) C1{ Fi:31 FL Fi:8}



static void Test_BFu31i_Ul_BFu8i()
{
  {
    init_simple_test("BFu31i_Ul_BFu8i");
    static STRUCT_IF_C BFu31i_Ul_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu31i_Ul_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu31i_Ul_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_BFu8i, BFu31i_Ul_BFu8i)
//============================================================================


struct  BFu31i_Ul_BFu8ll  {
  unsigned int v1:31;
  __tsu64 v2;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_Ul_BFu8ll) C1{ Fi:31 FL FL:8}



static void Test_BFu31i_Ul_BFu8ll()
{
  {
    init_simple_test("BFu31i_Ul_BFu8ll");
    static STRUCT_IF_C BFu31i_Ul_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu31i_Ul_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu31i_Ul_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_BFu8ll, BFu31i_Ul_BFu8ll)
//============================================================================


struct  BFu31i_Ul_BFu8s  {
  unsigned int v1:31;
  __tsu64 v2;
  unsigned short v3:8;
};
//SIG(1 BFu31i_Ul_BFu8s) C1{ Fi:31 FL Fs:8}



static void Test_BFu31i_Ul_BFu8s()
{
  {
    init_simple_test("BFu31i_Ul_BFu8s");
    static STRUCT_IF_C BFu31i_Ul_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu31i_Ul_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu31i_Ul_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_BFu8s, BFu31i_Ul_BFu8s)
//============================================================================


struct  BFu31i_Ul_BFu9i  {
  unsigned int v1:31;
  __tsu64 v2;
  unsigned int v3:9;
};
//SIG(1 BFu31i_Ul_BFu9i) C1{ Fi:31 FL Fi:9}



static void Test_BFu31i_Ul_BFu9i()
{
  {
    init_simple_test("BFu31i_Ul_BFu9i");
    static STRUCT_IF_C BFu31i_Ul_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu31i_Ul_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu31i_Ul_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_BFu9i, BFu31i_Ul_BFu9i)
//============================================================================


struct  BFu31i_Ul_BFu9ll  {
  unsigned int v1:31;
  __tsu64 v2;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_Ul_BFu9ll) C1{ Fi:31 FL FL:9}



static void Test_BFu31i_Ul_BFu9ll()
{
  {
    init_simple_test("BFu31i_Ul_BFu9ll");
    static STRUCT_IF_C BFu31i_Ul_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu31i_Ul_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu31i_Ul_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_BFu9ll, BFu31i_Ul_BFu9ll)
//============================================================================


struct  BFu31i_Ul_BFu9s  {
  unsigned int v1:31;
  __tsu64 v2;
  unsigned short v3:9;
};
//SIG(1 BFu31i_Ul_BFu9s) C1{ Fi:31 FL Fs:9}



static void Test_BFu31i_Ul_BFu9s()
{
  {
    init_simple_test("BFu31i_Ul_BFu9s");
    static STRUCT_IF_C BFu31i_Ul_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu31i_Ul_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu31i_Ul_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_BFu9s, BFu31i_Ul_BFu9s)
//============================================================================


struct  BFu31i_Ul_C  {
  unsigned int v1:31;
  __tsu64 v2;
  char v3;
};
//SIG(1 BFu31i_Ul_C) C1{ Fi:31 FL Fc}



static void Test_BFu31i_Ul_C()
{
  {
    init_simple_test("BFu31i_Ul_C");
    static STRUCT_IF_C BFu31i_Ul_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_Ul_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_C, BFu31i_Ul_C)
//============================================================================


struct  BFu31i_Ul_D  {
  unsigned int v1:31;
  __tsu64 v2;
  double v3;
};
//SIG(1 BFu31i_Ul_D) C1{ Fi:31 FL[2]}



static void Test_BFu31i_Ul_D()
{
  {
    init_simple_test("BFu31i_Ul_D");
    static STRUCT_IF_C BFu31i_Ul_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu31i_Ul_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_Ul_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_D, BFu31i_Ul_D)
//============================================================================


struct  BFu31i_Ul_F  {
  unsigned int v1:31;
  __tsu64 v2;
  float v3;
};
//SIG(1 BFu31i_Ul_F) C1{ Fi:31 FL Fi}



static void Test_BFu31i_Ul_F()
{
  {
    init_simple_test("BFu31i_Ul_F");
    static STRUCT_IF_C BFu31i_Ul_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_Ul_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_F, BFu31i_Ul_F)
//============================================================================


struct  BFu31i_Ul_I  {
  unsigned int v1:31;
  __tsu64 v2;
  int v3;
};
//SIG(1 BFu31i_Ul_I) C1{ Fi:31 FL Fi}



static void Test_BFu31i_Ul_I()
{
  {
    init_simple_test("BFu31i_Ul_I");
    static STRUCT_IF_C BFu31i_Ul_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_Ul_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_I, BFu31i_Ul_I)
//============================================================================


struct  BFu31i_Ul_Ip  {
  unsigned int v1:31;
  __tsu64 v2;
  int *v3;
};
//SIG(1 BFu31i_Ul_Ip) C1{ Fi:31 FL Fp}



static void Test_BFu31i_Ul_Ip()
{
  {
    init_simple_test("BFu31i_Ul_Ip");
    static STRUCT_IF_C BFu31i_Ul_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_Ul_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_Ip, BFu31i_Ul_Ip)
//============================================================================


struct  BFu31i_Ul_L  {
  unsigned int v1:31;
  __tsu64 v2;
  __tsi64 v3;
};
//SIG(1 BFu31i_Ul_L) C1{ Fi:31 FL[2]}



static void Test_BFu31i_Ul_L()
{
  {
    init_simple_test("BFu31i_Ul_L");
    static STRUCT_IF_C BFu31i_Ul_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu31i_Ul_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_Ul_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_L, BFu31i_Ul_L)
//============================================================================


struct  BFu31i_Ul_S  {
  unsigned int v1:31;
  __tsu64 v2;
  short v3;
};
//SIG(1 BFu31i_Ul_S) C1{ Fi:31 FL Fs}



static void Test_BFu31i_Ul_S()
{
  {
    init_simple_test("BFu31i_Ul_S");
    static STRUCT_IF_C BFu31i_Ul_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_Ul_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_S, BFu31i_Ul_S)
//============================================================================


struct  BFu31i_Ul_Uc  {
  unsigned int v1:31;
  __tsu64 v2;
  unsigned char v3;
};
//SIG(1 BFu31i_Ul_Uc) C1{ Fi:31 FL Fc}



static void Test_BFu31i_Ul_Uc()
{
  {
    init_simple_test("BFu31i_Ul_Uc");
    static STRUCT_IF_C BFu31i_Ul_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_Ul_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_Uc, BFu31i_Ul_Uc)
//============================================================================


struct  BFu31i_Ul_Ui  {
  unsigned int v1:31;
  __tsu64 v2;
  unsigned int v3;
};
//SIG(1 BFu31i_Ul_Ui) C1{ Fi:31 FL Fi}



static void Test_BFu31i_Ul_Ui()
{
  {
    init_simple_test("BFu31i_Ul_Ui");
    static STRUCT_IF_C BFu31i_Ul_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_Ul_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_Ui, BFu31i_Ul_Ui)
//============================================================================


struct  BFu31i_Ul_Ul  {
  unsigned int v1:31;
  __tsu64 v2;
  __tsu64 v3;
};
//SIG(1 BFu31i_Ul_Ul) C1{ Fi:31 FL[2]}



static void Test_BFu31i_Ul_Ul()
{
  {
    init_simple_test("BFu31i_Ul_Ul");
    static STRUCT_IF_C BFu31i_Ul_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu31i_Ul_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_Ul_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_Ul, BFu31i_Ul_Ul)
//============================================================================


struct  BFu31i_Ul_Us  {
  unsigned int v1:31;
  __tsu64 v2;
  unsigned short v3;
};
//SIG(1 BFu31i_Ul_Us) C1{ Fi:31 FL Fs}



static void Test_BFu31i_Ul_Us()
{
  {
    init_simple_test("BFu31i_Ul_Us");
    static STRUCT_IF_C BFu31i_Ul_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_Ul_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_Us, BFu31i_Ul_Us)
//============================================================================


struct  BFu31i_Ul_Vp  {
  unsigned int v1:31;
  __tsu64 v2;
  void *v3;
};
//SIG(1 BFu31i_Ul_Vp) C1{ Fi:31 FL Fp}



static void Test_BFu31i_Ul_Vp()
{
  {
    init_simple_test("BFu31i_Ul_Vp");
    static STRUCT_IF_C BFu31i_Ul_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_Ul_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Ul_Vp, BFu31i_Ul_Vp)
//============================================================================


struct  BFu31i_Us  {
  unsigned int v1:31;
  unsigned short v2;
};
//SIG(1 BFu31i_Us) C1{ Fi:31 Fs}



static void Test_BFu31i_Us()
{
  {
    init_simple_test("BFu31i_Us");
    static STRUCT_IF_C BFu31i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us");
    check_field_offset(lv, v2, 4, "BFu31i_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us, BFu31i_Us)
//============================================================================


struct  BFu31i_Us_BFu15i  {
  unsigned int v1:31;
  unsigned short v2;
  unsigned int v3:15;
};
//SIG(1 BFu31i_Us_BFu15i) C1{ Fi:31 Fs Fi:15}



static void Test_BFu31i_Us_BFu15i()
{
  {
    init_simple_test("BFu31i_Us_BFu15i");
    static STRUCT_IF_C BFu31i_Us_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Us_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Us_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu15i");
    check_field_offset(lv, v2, 4, "BFu31i_Us_BFu15i.v2");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_Us_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_Us_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_BFu15i, BFu31i_Us_BFu15i)
//============================================================================


struct  BFu31i_Us_BFu15ll  {
  unsigned int v1:31;
  unsigned short v2;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_Us_BFu15ll) C1{ Fi:31 Fs FL:15}



static void Test_BFu31i_Us_BFu15ll()
{
  {
    init_simple_test("BFu31i_Us_BFu15ll");
    static STRUCT_IF_C BFu31i_Us_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Us_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Us_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu31i_Us_BFu15ll.v2");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_Us_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_Us_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_BFu15ll, BFu31i_Us_BFu15ll)
//============================================================================


struct  BFu31i_Us_BFu15s  {
  unsigned int v1:31;
  unsigned short v2;
  unsigned short v3:15;
};
//SIG(1 BFu31i_Us_BFu15s) C1{ Fi:31 Fs Fs:15}



static void Test_BFu31i_Us_BFu15s()
{
  {
    init_simple_test("BFu31i_Us_BFu15s");
    static STRUCT_IF_C BFu31i_Us_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Us_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Us_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu15s");
    check_field_offset(lv, v2, 4, "BFu31i_Us_BFu15s.v2");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_Us_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_Us_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_BFu15s, BFu31i_Us_BFu15s)
//============================================================================


struct  BFu31i_Us_BFu16i  {
  unsigned int v1:31;
  unsigned short v2;
  unsigned int v3:16;
};
//SIG(1 BFu31i_Us_BFu16i) C1{ Fi:31 Fs Fi:16}



static void Test_BFu31i_Us_BFu16i()
{
  {
    init_simple_test("BFu31i_Us_BFu16i");
    static STRUCT_IF_C BFu31i_Us_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Us_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Us_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu16i");
    check_field_offset(lv, v2, 4, "BFu31i_Us_BFu16i.v2");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_Us_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_Us_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_BFu16i, BFu31i_Us_BFu16i)
//============================================================================


struct  BFu31i_Us_BFu16ll  {
  unsigned int v1:31;
  unsigned short v2;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_Us_BFu16ll) C1{ Fi:31 Fs FL:16}



static void Test_BFu31i_Us_BFu16ll()
{
  {
    init_simple_test("BFu31i_Us_BFu16ll");
    static STRUCT_IF_C BFu31i_Us_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Us_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Us_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu31i_Us_BFu16ll.v2");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_Us_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_Us_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_BFu16ll, BFu31i_Us_BFu16ll)
//============================================================================


struct  BFu31i_Us_BFu16s  {
  unsigned int v1:31;
  unsigned short v2;
  unsigned short v3:16;
};
//SIG(1 BFu31i_Us_BFu16s) C1{ Fi:31 Fs Fs:16}



static void Test_BFu31i_Us_BFu16s()
{
  {
    init_simple_test("BFu31i_Us_BFu16s");
    static STRUCT_IF_C BFu31i_Us_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Us_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Us_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu16s");
    check_field_offset(lv, v2, 4, "BFu31i_Us_BFu16s.v2");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_Us_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_Us_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_BFu16s, BFu31i_Us_BFu16s)
//============================================================================


struct  BFu31i_Us_BFu17i  {
  unsigned int v1:31;
  unsigned short v2;
  unsigned int v3:17;
};
//SIG(1 BFu31i_Us_BFu17i) C1{ Fi:31 Fs Fi:17}



static void Test_BFu31i_Us_BFu17i()
{
  {
    init_simple_test("BFu31i_Us_BFu17i");
    static STRUCT_IF_C BFu31i_Us_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Us_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Us_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu17i");
    check_field_offset(lv, v2, 4, "BFu31i_Us_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31i_Us_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31i_Us_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_BFu17i, BFu31i_Us_BFu17i)
//============================================================================


struct  BFu31i_Us_BFu17ll  {
  unsigned int v1:31;
  unsigned short v2;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_Us_BFu17ll) C1{ Fi:31 Fs FL:17}



static void Test_BFu31i_Us_BFu17ll()
{
  {
    init_simple_test("BFu31i_Us_BFu17ll");
    static STRUCT_IF_C BFu31i_Us_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_Us_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Us_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu31i_Us_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, 1, "BFu31i_Us_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, hide_ull(1LL<<16), "BFu31i_Us_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_BFu17ll, BFu31i_Us_BFu17ll)
//============================================================================


struct  BFu31i_Us_BFu1c  {
  unsigned int v1:31;
  unsigned short v2;
  unsigned char v3:1;
};
//SIG(1 BFu31i_Us_BFu1c) C1{ Fi:31 Fs Fc:1}



static void Test_BFu31i_Us_BFu1c()
{
  {
    init_simple_test("BFu31i_Us_BFu1c");
    static STRUCT_IF_C BFu31i_Us_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Us_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Us_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu1c");
    check_field_offset(lv, v2, 4, "BFu31i_Us_BFu1c.v2");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31i_Us_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_BFu1c, BFu31i_Us_BFu1c)
//============================================================================


struct  BFu31i_Us_BFu1i  {
  unsigned int v1:31;
  unsigned short v2;
  unsigned int v3:1;
};
//SIG(1 BFu31i_Us_BFu1i) C1{ Fi:31 Fs Fi:1}



static void Test_BFu31i_Us_BFu1i()
{
  {
    init_simple_test("BFu31i_Us_BFu1i");
    static STRUCT_IF_C BFu31i_Us_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Us_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Us_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu1i");
    check_field_offset(lv, v2, 4, "BFu31i_Us_BFu1i.v2");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31i_Us_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_BFu1i, BFu31i_Us_BFu1i)
//============================================================================


struct  BFu31i_Us_BFu1ll  {
  unsigned int v1:31;
  unsigned short v2;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_Us_BFu1ll) C1{ Fi:31 Fs FL:1}



static void Test_BFu31i_Us_BFu1ll()
{
  {
    init_simple_test("BFu31i_Us_BFu1ll");
    static STRUCT_IF_C BFu31i_Us_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Us_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Us_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu31i_Us_BFu1ll.v2");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31i_Us_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_BFu1ll, BFu31i_Us_BFu1ll)
//============================================================================


struct  BFu31i_Us_BFu1s  {
  unsigned int v1:31;
  unsigned short v2;
  unsigned short v3:1;
};
//SIG(1 BFu31i_Us_BFu1s) C1{ Fi:31 Fs Fs:1}



static void Test_BFu31i_Us_BFu1s()
{
  {
    init_simple_test("BFu31i_Us_BFu1s");
    static STRUCT_IF_C BFu31i_Us_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Us_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Us_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu1s");
    check_field_offset(lv, v2, 4, "BFu31i_Us_BFu1s.v2");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31i_Us_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_BFu1s, BFu31i_Us_BFu1s)
//============================================================================


struct  BFu31i_Us_BFu31i  {
  unsigned int v1:31;
  unsigned short v2;
  unsigned int v3:31;
};
//SIG(1 BFu31i_Us_BFu31i) C1{ Fi:31 Fs Fi:31}



static void Test_BFu31i_Us_BFu31i()
{
  {
    init_simple_test("BFu31i_Us_BFu31i");
    static STRUCT_IF_C BFu31i_Us_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Us_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Us_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu31i");
    check_field_offset(lv, v2, 4, "BFu31i_Us_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_Us_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_BFu31i, BFu31i_Us_BFu31i)
//============================================================================


struct  BFu31i_Us_BFu31ll  {
  unsigned int v1:31;
  unsigned short v2;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_Us_BFu31ll) C1{ Fi:31 Fs FL:31}



static void Test_BFu31i_Us_BFu31ll()
{
  {
    init_simple_test("BFu31i_Us_BFu31ll");
    static STRUCT_IF_C BFu31i_Us_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_Us_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Us_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu31i_Us_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, 1, "BFu31i_Us_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_BFu31ll, BFu31i_Us_BFu31ll)
//============================================================================


struct  BFu31i_Us_BFu32i  {
  unsigned int v1:31;
  unsigned short v2;
  unsigned int v3:32;
};
//SIG(1 BFu31i_Us_BFu32i) C1{ Fi:31 Fs Fi:32}



static void Test_BFu31i_Us_BFu32i()
{
  {
    init_simple_test("BFu31i_Us_BFu32i");
    static STRUCT_IF_C BFu31i_Us_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Us_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Us_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu32i");
    check_field_offset(lv, v2, 4, "BFu31i_Us_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_Us_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_Us_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_BFu32i, BFu31i_Us_BFu32i)
//============================================================================


struct  BFu31i_Us_BFu32ll  {
  unsigned int v1:31;
  unsigned short v2;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_Us_BFu32ll) C1{ Fi:31 Fs FL:32}



static void Test_BFu31i_Us_BFu32ll()
{
  {
    init_simple_test("BFu31i_Us_BFu32ll");
    static STRUCT_IF_C BFu31i_Us_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_Us_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Us_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu31i_Us_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, 1, "BFu31i_Us_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, hide_ull(1LL<<31), "BFu31i_Us_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_BFu32ll, BFu31i_Us_BFu32ll)
//============================================================================


struct  BFu31i_Us_BFu33  {
  unsigned int v1:31;
  unsigned short v2;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_Us_BFu33) C1{ Fi:31 Fs FL:33}



static void Test_BFu31i_Us_BFu33()
{
  {
    init_simple_test("BFu31i_Us_BFu33");
    static STRUCT_IF_C BFu31i_Us_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_Us_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Us_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu33");
    check_field_offset(lv, v2, 4, "BFu31i_Us_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, 1, "BFu31i_Us_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, hide_ull(1LL<<32), "BFu31i_Us_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_BFu33, BFu31i_Us_BFu33)
//============================================================================


struct  BFu31i_Us_BFu7c  {
  unsigned int v1:31;
  unsigned short v2;
  unsigned char v3:7;
};
//SIG(1 BFu31i_Us_BFu7c) C1{ Fi:31 Fs Fc:7}



static void Test_BFu31i_Us_BFu7c()
{
  {
    init_simple_test("BFu31i_Us_BFu7c");
    static STRUCT_IF_C BFu31i_Us_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Us_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Us_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu7c");
    check_field_offset(lv, v2, 4, "BFu31i_Us_BFu7c.v2");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31i_Us_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31i_Us_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_BFu7c, BFu31i_Us_BFu7c)
//============================================================================


struct  BFu31i_Us_BFu7i  {
  unsigned int v1:31;
  unsigned short v2;
  unsigned int v3:7;
};
//SIG(1 BFu31i_Us_BFu7i) C1{ Fi:31 Fs Fi:7}



static void Test_BFu31i_Us_BFu7i()
{
  {
    init_simple_test("BFu31i_Us_BFu7i");
    static STRUCT_IF_C BFu31i_Us_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Us_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Us_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu7i");
    check_field_offset(lv, v2, 4, "BFu31i_Us_BFu7i.v2");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31i_Us_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31i_Us_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_BFu7i, BFu31i_Us_BFu7i)
//============================================================================


struct  BFu31i_Us_BFu7ll  {
  unsigned int v1:31;
  unsigned short v2;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_Us_BFu7ll) C1{ Fi:31 Fs FL:7}



static void Test_BFu31i_Us_BFu7ll()
{
  {
    init_simple_test("BFu31i_Us_BFu7ll");
    static STRUCT_IF_C BFu31i_Us_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Us_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Us_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu31i_Us_BFu7ll.v2");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31i_Us_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31i_Us_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_BFu7ll, BFu31i_Us_BFu7ll)
//============================================================================


struct  BFu31i_Us_BFu7s  {
  unsigned int v1:31;
  unsigned short v2;
  unsigned short v3:7;
};
//SIG(1 BFu31i_Us_BFu7s) C1{ Fi:31 Fs Fs:7}



static void Test_BFu31i_Us_BFu7s()
{
  {
    init_simple_test("BFu31i_Us_BFu7s");
    static STRUCT_IF_C BFu31i_Us_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Us_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Us_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu7s");
    check_field_offset(lv, v2, 4, "BFu31i_Us_BFu7s.v2");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31i_Us_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31i_Us_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_BFu7s, BFu31i_Us_BFu7s)
//============================================================================


struct  BFu31i_Us_BFu8c  {
  unsigned int v1:31;
  unsigned short v2;
  unsigned char v3:8;
};
//SIG(1 BFu31i_Us_BFu8c) C1{ Fi:31 Fs Fc:8}



static void Test_BFu31i_Us_BFu8c()
{
  {
    init_simple_test("BFu31i_Us_BFu8c");
    static STRUCT_IF_C BFu31i_Us_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Us_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Us_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu8c");
    check_field_offset(lv, v2, 4, "BFu31i_Us_BFu8c.v2");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_Us_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_Us_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_BFu8c, BFu31i_Us_BFu8c)
//============================================================================


struct  BFu31i_Us_BFu8i  {
  unsigned int v1:31;
  unsigned short v2;
  unsigned int v3:8;
};
//SIG(1 BFu31i_Us_BFu8i) C1{ Fi:31 Fs Fi:8}



static void Test_BFu31i_Us_BFu8i()
{
  {
    init_simple_test("BFu31i_Us_BFu8i");
    static STRUCT_IF_C BFu31i_Us_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Us_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Us_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu8i");
    check_field_offset(lv, v2, 4, "BFu31i_Us_BFu8i.v2");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_Us_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_Us_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_BFu8i, BFu31i_Us_BFu8i)
//============================================================================


struct  BFu31i_Us_BFu8ll  {
  unsigned int v1:31;
  unsigned short v2;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_Us_BFu8ll) C1{ Fi:31 Fs FL:8}



static void Test_BFu31i_Us_BFu8ll()
{
  {
    init_simple_test("BFu31i_Us_BFu8ll");
    static STRUCT_IF_C BFu31i_Us_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Us_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Us_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu31i_Us_BFu8ll.v2");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_Us_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_Us_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_BFu8ll, BFu31i_Us_BFu8ll)
//============================================================================


struct  BFu31i_Us_BFu8s  {
  unsigned int v1:31;
  unsigned short v2;
  unsigned short v3:8;
};
//SIG(1 BFu31i_Us_BFu8s) C1{ Fi:31 Fs Fs:8}



static void Test_BFu31i_Us_BFu8s()
{
  {
    init_simple_test("BFu31i_Us_BFu8s");
    static STRUCT_IF_C BFu31i_Us_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Us_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Us_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu8s");
    check_field_offset(lv, v2, 4, "BFu31i_Us_BFu8s.v2");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31i_Us_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31i_Us_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_BFu8s, BFu31i_Us_BFu8s)
//============================================================================


struct  BFu31i_Us_BFu9i  {
  unsigned int v1:31;
  unsigned short v2;
  unsigned int v3:9;
};
//SIG(1 BFu31i_Us_BFu9i) C1{ Fi:31 Fs Fi:9}



static void Test_BFu31i_Us_BFu9i()
{
  {
    init_simple_test("BFu31i_Us_BFu9i");
    static STRUCT_IF_C BFu31i_Us_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Us_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Us_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu9i");
    check_field_offset(lv, v2, 4, "BFu31i_Us_BFu9i.v2");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31i_Us_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31i_Us_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_BFu9i, BFu31i_Us_BFu9i)
//============================================================================


struct  BFu31i_Us_BFu9ll  {
  unsigned int v1:31;
  unsigned short v2;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_Us_BFu9ll) C1{ Fi:31 Fs FL:9}



static void Test_BFu31i_Us_BFu9ll()
{
  {
    init_simple_test("BFu31i_Us_BFu9ll");
    static STRUCT_IF_C BFu31i_Us_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Us_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Us_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu31i_Us_BFu9ll.v2");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31i_Us_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31i_Us_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_BFu9ll, BFu31i_Us_BFu9ll)
//============================================================================


struct  BFu31i_Us_BFu9s  {
  unsigned int v1:31;
  unsigned short v2;
  unsigned short v3:9;
};
//SIG(1 BFu31i_Us_BFu9s) C1{ Fi:31 Fs Fs:9}



static void Test_BFu31i_Us_BFu9s()
{
  {
    init_simple_test("BFu31i_Us_BFu9s");
    static STRUCT_IF_C BFu31i_Us_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Us_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Us_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_BFu9s");
    check_field_offset(lv, v2, 4, "BFu31i_Us_BFu9s.v2");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31i_Us_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31i_Us_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_BFu9s, BFu31i_Us_BFu9s)
//============================================================================


struct  BFu31i_Us_C  {
  unsigned int v1:31;
  unsigned short v2;
  char v3;
};
//SIG(1 BFu31i_Us_C) C1{ Fi:31 Fs Fc}



static void Test_BFu31i_Us_C()
{
  {
    init_simple_test("BFu31i_Us_C");
    static STRUCT_IF_C BFu31i_Us_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Us_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Us_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_C");
    check_field_offset(lv, v2, 4, "BFu31i_Us_C.v2");
    check_field_offset(lv, v3, 6, "BFu31i_Us_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_C, BFu31i_Us_C)
//============================================================================


struct  BFu31i_Us_D  {
  unsigned int v1:31;
  unsigned short v2;
  double v3;
};
//SIG(1 BFu31i_Us_D) C1{ Fi:31 Fs FL}



static void Test_BFu31i_Us_D()
{
  {
    init_simple_test("BFu31i_Us_D");
    static STRUCT_IF_C BFu31i_Us_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_Us_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Us_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_D");
    check_field_offset(lv, v2, 4, "BFu31i_Us_D.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Us_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_D, BFu31i_Us_D)
//============================================================================


struct  BFu31i_Us_F  {
  unsigned int v1:31;
  unsigned short v2;
  float v3;
};
//SIG(1 BFu31i_Us_F) C1{ Fi:31 Fs Fi}



static void Test_BFu31i_Us_F()
{
  {
    init_simple_test("BFu31i_Us_F");
    static STRUCT_IF_C BFu31i_Us_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Us_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Us_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_F");
    check_field_offset(lv, v2, 4, "BFu31i_Us_F.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Us_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_F, BFu31i_Us_F)
//============================================================================


struct  BFu31i_Us_I  {
  unsigned int v1:31;
  unsigned short v2;
  int v3;
};
//SIG(1 BFu31i_Us_I) C1{ Fi:31 Fs Fi}



static void Test_BFu31i_Us_I()
{
  {
    init_simple_test("BFu31i_Us_I");
    static STRUCT_IF_C BFu31i_Us_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Us_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Us_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_I");
    check_field_offset(lv, v2, 4, "BFu31i_Us_I.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Us_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_I, BFu31i_Us_I)
//============================================================================


struct  BFu31i_Us_Ip  {
  unsigned int v1:31;
  unsigned short v2;
  int *v3;
};
//SIG(1 BFu31i_Us_Ip) C1{ Fi:31 Fs Fp}



static void Test_BFu31i_Us_Ip()
{
  {
    init_simple_test("BFu31i_Us_Ip");
    static STRUCT_IF_C BFu31i_Us_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_Us_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Us_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_Ip");
    check_field_offset(lv, v2, 4, "BFu31i_Us_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Us_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_Ip, BFu31i_Us_Ip)
//============================================================================


struct  BFu31i_Us_L  {
  unsigned int v1:31;
  unsigned short v2;
  __tsi64 v3;
};
//SIG(1 BFu31i_Us_L) C1{ Fi:31 Fs FL}



static void Test_BFu31i_Us_L()
{
  {
    init_simple_test("BFu31i_Us_L");
    static STRUCT_IF_C BFu31i_Us_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_Us_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Us_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_L");
    check_field_offset(lv, v2, 4, "BFu31i_Us_L.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Us_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_L, BFu31i_Us_L)
//============================================================================


struct  BFu31i_Us_S  {
  unsigned int v1:31;
  unsigned short v2;
  short v3;
};
//SIG(1 BFu31i_Us_S) C1{ Fi:31 Fs[2]}



static void Test_BFu31i_Us_S()
{
  {
    init_simple_test("BFu31i_Us_S");
    static STRUCT_IF_C BFu31i_Us_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Us_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Us_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_S");
    check_field_offset(lv, v2, 4, "BFu31i_Us_S.v2");
    check_field_offset(lv, v3, 6, "BFu31i_Us_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_S, BFu31i_Us_S)
//============================================================================


struct  BFu31i_Us_Uc  {
  unsigned int v1:31;
  unsigned short v2;
  unsigned char v3;
};
//SIG(1 BFu31i_Us_Uc) C1{ Fi:31 Fs Fc}



static void Test_BFu31i_Us_Uc()
{
  {
    init_simple_test("BFu31i_Us_Uc");
    static STRUCT_IF_C BFu31i_Us_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Us_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Us_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_Uc");
    check_field_offset(lv, v2, 4, "BFu31i_Us_Uc.v2");
    check_field_offset(lv, v3, 6, "BFu31i_Us_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_Uc, BFu31i_Us_Uc)
//============================================================================


struct  BFu31i_Us_Ui  {
  unsigned int v1:31;
  unsigned short v2;
  unsigned int v3;
};
//SIG(1 BFu31i_Us_Ui) C1{ Fi:31 Fs Fi}



static void Test_BFu31i_Us_Ui()
{
  {
    init_simple_test("BFu31i_Us_Ui");
    static STRUCT_IF_C BFu31i_Us_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Us_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Us_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_Ui");
    check_field_offset(lv, v2, 4, "BFu31i_Us_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Us_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_Ui, BFu31i_Us_Ui)
//============================================================================


struct  BFu31i_Us_Ul  {
  unsigned int v1:31;
  unsigned short v2;
  __tsu64 v3;
};
//SIG(1 BFu31i_Us_Ul) C1{ Fi:31 Fs FL}



static void Test_BFu31i_Us_Ul()
{
  {
    init_simple_test("BFu31i_Us_Ul");
    static STRUCT_IF_C BFu31i_Us_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_Us_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Us_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_Ul");
    check_field_offset(lv, v2, 4, "BFu31i_Us_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Us_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_Ul, BFu31i_Us_Ul)
//============================================================================


struct  BFu31i_Us_Us  {
  unsigned int v1:31;
  unsigned short v2;
  unsigned short v3;
};
//SIG(1 BFu31i_Us_Us) C1{ Fi:31 Fs[2]}



static void Test_BFu31i_Us_Us()
{
  {
    init_simple_test("BFu31i_Us_Us");
    static STRUCT_IF_C BFu31i_Us_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Us_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Us_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_Us");
    check_field_offset(lv, v2, 4, "BFu31i_Us_Us.v2");
    check_field_offset(lv, v3, 6, "BFu31i_Us_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_Us, BFu31i_Us_Us)
//============================================================================


struct  BFu31i_Us_Vp  {
  unsigned int v1:31;
  unsigned short v2;
  void *v3;
};
//SIG(1 BFu31i_Us_Vp) C1{ Fi:31 Fs Fp}



static void Test_BFu31i_Us_Vp()
{
  {
    init_simple_test("BFu31i_Us_Vp");
    static STRUCT_IF_C BFu31i_Us_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_Us_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Us_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_Vp");
    check_field_offset(lv, v2, 4, "BFu31i_Us_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Us_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Us_Vp, BFu31i_Us_Vp)
//============================================================================


struct  BFu31i_Vp  {
  unsigned int v1:31;
  void *v2;
};
//SIG(1 BFu31i_Vp) C1{ Fi:31 Fp}



static void Test_BFu31i_Vp()
{
  {
    init_simple_test("BFu31i_Vp");
    static STRUCT_IF_C BFu31i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu31i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp, BFu31i_Vp)
//============================================================================


struct  BFu31i_Vp_BFu15i  {
  unsigned int v1:31;
  void *v2;
  unsigned int v3:15;
};
//SIG(1 BFu31i_Vp_BFu15i) C1{ Fi:31 Fp Fi:15}



static void Test_BFu31i_Vp_BFu15i()
{
  {
    init_simple_test("BFu31i_Vp_BFu15i");
    static STRUCT_IF_C BFu31i_Vp_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu31i_Vp_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu31i_Vp_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_BFu15i, BFu31i_Vp_BFu15i)
//============================================================================


struct  BFu31i_Vp_BFu15ll  {
  unsigned int v1:31;
  void *v2;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_Vp_BFu15ll) C1{ Fi:31 Fp FL:15}



static void Test_BFu31i_Vp_BFu15ll()
{
  {
    init_simple_test("BFu31i_Vp_BFu15ll");
    static STRUCT_IF_C BFu31i_Vp_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu31i_Vp_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu31i_Vp_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_BFu15ll, BFu31i_Vp_BFu15ll)
//============================================================================


struct  BFu31i_Vp_BFu15s  {
  unsigned int v1:31;
  void *v2;
  unsigned short v3:15;
};
//SIG(1 BFu31i_Vp_BFu15s) C1{ Fi:31 Fp Fs:15}



static void Test_BFu31i_Vp_BFu15s()
{
  {
    init_simple_test("BFu31i_Vp_BFu15s");
    static STRUCT_IF_C BFu31i_Vp_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu31i_Vp_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu31i_Vp_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_BFu15s, BFu31i_Vp_BFu15s)
//============================================================================


struct  BFu31i_Vp_BFu16i  {
  unsigned int v1:31;
  void *v2;
  unsigned int v3:16;
};
//SIG(1 BFu31i_Vp_BFu16i) C1{ Fi:31 Fp Fi:16}



static void Test_BFu31i_Vp_BFu16i()
{
  {
    init_simple_test("BFu31i_Vp_BFu16i");
    static STRUCT_IF_C BFu31i_Vp_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu31i_Vp_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu31i_Vp_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_BFu16i, BFu31i_Vp_BFu16i)
//============================================================================


struct  BFu31i_Vp_BFu16ll  {
  unsigned int v1:31;
  void *v2;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_Vp_BFu16ll) C1{ Fi:31 Fp FL:16}



static void Test_BFu31i_Vp_BFu16ll()
{
  {
    init_simple_test("BFu31i_Vp_BFu16ll");
    static STRUCT_IF_C BFu31i_Vp_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu31i_Vp_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu31i_Vp_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_BFu16ll, BFu31i_Vp_BFu16ll)
//============================================================================


struct  BFu31i_Vp_BFu16s  {
  unsigned int v1:31;
  void *v2;
  unsigned short v3:16;
};
//SIG(1 BFu31i_Vp_BFu16s) C1{ Fi:31 Fp Fs:16}



static void Test_BFu31i_Vp_BFu16s()
{
  {
    init_simple_test("BFu31i_Vp_BFu16s");
    static STRUCT_IF_C BFu31i_Vp_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu31i_Vp_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu31i_Vp_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_BFu16s, BFu31i_Vp_BFu16s)
//============================================================================


struct  BFu31i_Vp_BFu17i  {
  unsigned int v1:31;
  void *v2;
  unsigned int v3:17;
};
//SIG(1 BFu31i_Vp_BFu17i) C1{ Fi:31 Fp Fi:17}



static void Test_BFu31i_Vp_BFu17i()
{
  {
    init_simple_test("BFu31i_Vp_BFu17i");
    static STRUCT_IF_C BFu31i_Vp_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu31i_Vp_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu31i_Vp_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_BFu17i, BFu31i_Vp_BFu17i)
//============================================================================


struct  BFu31i_Vp_BFu17ll  {
  unsigned int v1:31;
  void *v2;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_Vp_BFu17ll) C1{ Fi:31 Fp FL:17}



static void Test_BFu31i_Vp_BFu17ll()
{
  {
    init_simple_test("BFu31i_Vp_BFu17ll");
    static STRUCT_IF_C BFu31i_Vp_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu31i_Vp_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu31i_Vp_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_BFu17ll, BFu31i_Vp_BFu17ll)
//============================================================================


struct  BFu31i_Vp_BFu1c  {
  unsigned int v1:31;
  void *v2;
  unsigned char v3:1;
};
//SIG(1 BFu31i_Vp_BFu1c) C1{ Fi:31 Fp Fc:1}



static void Test_BFu31i_Vp_BFu1c()
{
  {
    init_simple_test("BFu31i_Vp_BFu1c");
    static STRUCT_IF_C BFu31i_Vp_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu31i_Vp_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_BFu1c, BFu31i_Vp_BFu1c)
//============================================================================


struct  BFu31i_Vp_BFu1i  {
  unsigned int v1:31;
  void *v2;
  unsigned int v3:1;
};
//SIG(1 BFu31i_Vp_BFu1i) C1{ Fi:31 Fp Fi:1}



static void Test_BFu31i_Vp_BFu1i()
{
  {
    init_simple_test("BFu31i_Vp_BFu1i");
    static STRUCT_IF_C BFu31i_Vp_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu31i_Vp_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_BFu1i, BFu31i_Vp_BFu1i)
//============================================================================


struct  BFu31i_Vp_BFu1ll  {
  unsigned int v1:31;
  void *v2;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_Vp_BFu1ll) C1{ Fi:31 Fp FL:1}



static void Test_BFu31i_Vp_BFu1ll()
{
  {
    init_simple_test("BFu31i_Vp_BFu1ll");
    static STRUCT_IF_C BFu31i_Vp_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu31i_Vp_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_BFu1ll, BFu31i_Vp_BFu1ll)
//============================================================================


struct  BFu31i_Vp_BFu1s  {
  unsigned int v1:31;
  void *v2;
  unsigned short v3:1;
};
//SIG(1 BFu31i_Vp_BFu1s) C1{ Fi:31 Fp Fs:1}



static void Test_BFu31i_Vp_BFu1s()
{
  {
    init_simple_test("BFu31i_Vp_BFu1s");
    static STRUCT_IF_C BFu31i_Vp_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu31i_Vp_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_BFu1s, BFu31i_Vp_BFu1s)
//============================================================================


struct  BFu31i_Vp_BFu31i  {
  unsigned int v1:31;
  void *v2;
  unsigned int v3:31;
};
//SIG(1 BFu31i_Vp_BFu31i) C1{ Fi:31 Fp Fi:31}



static void Test_BFu31i_Vp_BFu31i()
{
  {
    init_simple_test("BFu31i_Vp_BFu31i");
    static STRUCT_IF_C BFu31i_Vp_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu31i_Vp_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_BFu31i, BFu31i_Vp_BFu31i)
//============================================================================


struct  BFu31i_Vp_BFu31ll  {
  unsigned int v1:31;
  void *v2;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_Vp_BFu31ll) C1{ Fi:31 Fp FL:31}



static void Test_BFu31i_Vp_BFu31ll()
{
  {
    init_simple_test("BFu31i_Vp_BFu31ll");
    static STRUCT_IF_C BFu31i_Vp_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu31i_Vp_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_BFu31ll, BFu31i_Vp_BFu31ll)
//============================================================================


struct  BFu31i_Vp_BFu32i  {
  unsigned int v1:31;
  void *v2;
  unsigned int v3:32;
};
//SIG(1 BFu31i_Vp_BFu32i) C1{ Fi:31 Fp Fi:32}



static void Test_BFu31i_Vp_BFu32i()
{
  {
    init_simple_test("BFu31i_Vp_BFu32i");
    static STRUCT_IF_C BFu31i_Vp_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu31i_Vp_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu31i_Vp_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_BFu32i, BFu31i_Vp_BFu32i)
//============================================================================


struct  BFu31i_Vp_BFu32ll  {
  unsigned int v1:31;
  void *v2;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_Vp_BFu32ll) C1{ Fi:31 Fp FL:32}



static void Test_BFu31i_Vp_BFu32ll()
{
  {
    init_simple_test("BFu31i_Vp_BFu32ll");
    static STRUCT_IF_C BFu31i_Vp_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu31i_Vp_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu31i_Vp_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_BFu32ll, BFu31i_Vp_BFu32ll)
//============================================================================


struct  BFu31i_Vp_BFu33  {
  unsigned int v1:31;
  void *v2;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_Vp_BFu33) C1{ Fi:31 Fp FL:33}



static void Test_BFu31i_Vp_BFu33()
{
  {
    init_simple_test("BFu31i_Vp_BFu33");
    static STRUCT_IF_C BFu31i_Vp_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Vp_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "BFu31i_Vp_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "BFu31i_Vp_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_BFu33, BFu31i_Vp_BFu33)
//============================================================================


struct  BFu31i_Vp_BFu7c  {
  unsigned int v1:31;
  void *v2;
  unsigned char v3:7;
};
//SIG(1 BFu31i_Vp_BFu7c) C1{ Fi:31 Fp Fc:7}



static void Test_BFu31i_Vp_BFu7c()
{
  {
    init_simple_test("BFu31i_Vp_BFu7c");
    static STRUCT_IF_C BFu31i_Vp_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu31i_Vp_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu31i_Vp_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_BFu7c, BFu31i_Vp_BFu7c)
//============================================================================


struct  BFu31i_Vp_BFu7i  {
  unsigned int v1:31;
  void *v2;
  unsigned int v3:7;
};
//SIG(1 BFu31i_Vp_BFu7i) C1{ Fi:31 Fp Fi:7}



static void Test_BFu31i_Vp_BFu7i()
{
  {
    init_simple_test("BFu31i_Vp_BFu7i");
    static STRUCT_IF_C BFu31i_Vp_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu31i_Vp_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu31i_Vp_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_BFu7i, BFu31i_Vp_BFu7i)
//============================================================================


struct  BFu31i_Vp_BFu7ll  {
  unsigned int v1:31;
  void *v2;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_Vp_BFu7ll) C1{ Fi:31 Fp FL:7}



static void Test_BFu31i_Vp_BFu7ll()
{
  {
    init_simple_test("BFu31i_Vp_BFu7ll");
    static STRUCT_IF_C BFu31i_Vp_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu31i_Vp_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu31i_Vp_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_BFu7ll, BFu31i_Vp_BFu7ll)
//============================================================================


struct  BFu31i_Vp_BFu7s  {
  unsigned int v1:31;
  void *v2;
  unsigned short v3:7;
};
//SIG(1 BFu31i_Vp_BFu7s) C1{ Fi:31 Fp Fs:7}



static void Test_BFu31i_Vp_BFu7s()
{
  {
    init_simple_test("BFu31i_Vp_BFu7s");
    static STRUCT_IF_C BFu31i_Vp_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu31i_Vp_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu31i_Vp_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_BFu7s, BFu31i_Vp_BFu7s)
//============================================================================


struct  BFu31i_Vp_BFu8c  {
  unsigned int v1:31;
  void *v2;
  unsigned char v3:8;
};
//SIG(1 BFu31i_Vp_BFu8c) C1{ Fi:31 Fp Fc:8}



static void Test_BFu31i_Vp_BFu8c()
{
  {
    init_simple_test("BFu31i_Vp_BFu8c");
    static STRUCT_IF_C BFu31i_Vp_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu31i_Vp_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu31i_Vp_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_BFu8c, BFu31i_Vp_BFu8c)
//============================================================================


struct  BFu31i_Vp_BFu8i  {
  unsigned int v1:31;
  void *v2;
  unsigned int v3:8;
};
//SIG(1 BFu31i_Vp_BFu8i) C1{ Fi:31 Fp Fi:8}



static void Test_BFu31i_Vp_BFu8i()
{
  {
    init_simple_test("BFu31i_Vp_BFu8i");
    static STRUCT_IF_C BFu31i_Vp_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu31i_Vp_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu31i_Vp_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_BFu8i, BFu31i_Vp_BFu8i)
//============================================================================


struct  BFu31i_Vp_BFu8ll  {
  unsigned int v1:31;
  void *v2;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_Vp_BFu8ll) C1{ Fi:31 Fp FL:8}



static void Test_BFu31i_Vp_BFu8ll()
{
  {
    init_simple_test("BFu31i_Vp_BFu8ll");
    static STRUCT_IF_C BFu31i_Vp_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu31i_Vp_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu31i_Vp_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_BFu8ll, BFu31i_Vp_BFu8ll)
//============================================================================


struct  BFu31i_Vp_BFu8s  {
  unsigned int v1:31;
  void *v2;
  unsigned short v3:8;
};
//SIG(1 BFu31i_Vp_BFu8s) C1{ Fi:31 Fp Fs:8}



static void Test_BFu31i_Vp_BFu8s()
{
  {
    init_simple_test("BFu31i_Vp_BFu8s");
    static STRUCT_IF_C BFu31i_Vp_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu31i_Vp_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu31i_Vp_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_BFu8s, BFu31i_Vp_BFu8s)
//============================================================================


struct  BFu31i_Vp_BFu9i  {
  unsigned int v1:31;
  void *v2;
  unsigned int v3:9;
};
//SIG(1 BFu31i_Vp_BFu9i) C1{ Fi:31 Fp Fi:9}



static void Test_BFu31i_Vp_BFu9i()
{
  {
    init_simple_test("BFu31i_Vp_BFu9i");
    static STRUCT_IF_C BFu31i_Vp_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu31i_Vp_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu31i_Vp_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_BFu9i, BFu31i_Vp_BFu9i)
//============================================================================


struct  BFu31i_Vp_BFu9ll  {
  unsigned int v1:31;
  void *v2;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_Vp_BFu9ll) C1{ Fi:31 Fp FL:9}



static void Test_BFu31i_Vp_BFu9ll()
{
  {
    init_simple_test("BFu31i_Vp_BFu9ll");
    static STRUCT_IF_C BFu31i_Vp_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu31i_Vp_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu31i_Vp_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_BFu9ll, BFu31i_Vp_BFu9ll)
//============================================================================


struct  BFu31i_Vp_BFu9s  {
  unsigned int v1:31;
  void *v2;
  unsigned short v3:9;
};
//SIG(1 BFu31i_Vp_BFu9s) C1{ Fi:31 Fp Fs:9}



static void Test_BFu31i_Vp_BFu9s()
{
  {
    init_simple_test("BFu31i_Vp_BFu9s");
    static STRUCT_IF_C BFu31i_Vp_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu31i_Vp_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu31i_Vp_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_BFu9s, BFu31i_Vp_BFu9s)
//============================================================================


struct  BFu31i_Vp_C  {
  unsigned int v1:31;
  void *v2;
  char v3;
};
//SIG(1 BFu31i_Vp_C) C1{ Fi:31 Fp Fc}



static void Test_BFu31i_Vp_C()
{
  {
    init_simple_test("BFu31i_Vp_C");
    static STRUCT_IF_C BFu31i_Vp_C lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu31i_Vp_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_C, BFu31i_Vp_C)
//============================================================================


struct  BFu31i_Vp_D  {
  unsigned int v1:31;
  void *v2;
  double v3;
};
//SIG(1 BFu31i_Vp_D) C1{ Fi:31 Fp FL}



static void Test_BFu31i_Vp_D()
{
  {
    init_simple_test("BFu31i_Vp_D");
    static STRUCT_IF_C BFu31i_Vp_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Vp_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu31i_Vp_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_D, BFu31i_Vp_D)
//============================================================================


struct  BFu31i_Vp_F  {
  unsigned int v1:31;
  void *v2;
  float v3;
};
//SIG(1 BFu31i_Vp_F) C1{ Fi:31 Fp Fi}



static void Test_BFu31i_Vp_F()
{
  {
    init_simple_test("BFu31i_Vp_F");
    static STRUCT_IF_C BFu31i_Vp_F lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu31i_Vp_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_F, BFu31i_Vp_F)
//============================================================================


struct  BFu31i_Vp_I  {
  unsigned int v1:31;
  void *v2;
  int v3;
};
//SIG(1 BFu31i_Vp_I) C1{ Fi:31 Fp Fi}



static void Test_BFu31i_Vp_I()
{
  {
    init_simple_test("BFu31i_Vp_I");
    static STRUCT_IF_C BFu31i_Vp_I lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu31i_Vp_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_I, BFu31i_Vp_I)
//============================================================================


struct  BFu31i_Vp_Ip  {
  unsigned int v1:31;
  void *v2;
  int *v3;
};
//SIG(1 BFu31i_Vp_Ip) C1{ Fi:31 Fp[2]}



static void Test_BFu31i_Vp_Ip()
{
  {
    init_simple_test("BFu31i_Vp_Ip");
    static STRUCT_IF_C BFu31i_Vp_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu31i_Vp_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_Ip, BFu31i_Vp_Ip)
//============================================================================


struct  BFu31i_Vp_L  {
  unsigned int v1:31;
  void *v2;
  __tsi64 v3;
};
//SIG(1 BFu31i_Vp_L) C1{ Fi:31 Fp FL}



static void Test_BFu31i_Vp_L()
{
  {
    init_simple_test("BFu31i_Vp_L");
    static STRUCT_IF_C BFu31i_Vp_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Vp_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu31i_Vp_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_L, BFu31i_Vp_L)
//============================================================================


struct  BFu31i_Vp_S  {
  unsigned int v1:31;
  void *v2;
  short v3;
};
//SIG(1 BFu31i_Vp_S) C1{ Fi:31 Fp Fs}



static void Test_BFu31i_Vp_S()
{
  {
    init_simple_test("BFu31i_Vp_S");
    static STRUCT_IF_C BFu31i_Vp_S lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu31i_Vp_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_S, BFu31i_Vp_S)
//============================================================================


struct  BFu31i_Vp_Uc  {
  unsigned int v1:31;
  void *v2;
  unsigned char v3;
};
//SIG(1 BFu31i_Vp_Uc) C1{ Fi:31 Fp Fc}



static void Test_BFu31i_Vp_Uc()
{
  {
    init_simple_test("BFu31i_Vp_Uc");
    static STRUCT_IF_C BFu31i_Vp_Uc lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu31i_Vp_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_Uc, BFu31i_Vp_Uc)
//============================================================================


struct  BFu31i_Vp_Ui  {
  unsigned int v1:31;
  void *v2;
  unsigned int v3;
};
//SIG(1 BFu31i_Vp_Ui) C1{ Fi:31 Fp Fi}



static void Test_BFu31i_Vp_Ui()
{
  {
    init_simple_test("BFu31i_Vp_Ui");
    static STRUCT_IF_C BFu31i_Vp_Ui lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu31i_Vp_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_Ui, BFu31i_Vp_Ui)
//============================================================================


struct  BFu31i_Vp_Ul  {
  unsigned int v1:31;
  void *v2;
  __tsu64 v3;
};
//SIG(1 BFu31i_Vp_Ul) C1{ Fi:31 Fp FL}



static void Test_BFu31i_Vp_Ul()
{
  {
    init_simple_test("BFu31i_Vp_Ul");
    static STRUCT_IF_C BFu31i_Vp_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Vp_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu31i_Vp_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_Ul, BFu31i_Vp_Ul)
//============================================================================


struct  BFu31i_Vp_Us  {
  unsigned int v1:31;
  void *v2;
  unsigned short v3;
};
//SIG(1 BFu31i_Vp_Us) C1{ Fi:31 Fp Fs}



static void Test_BFu31i_Vp_Us()
{
  {
    init_simple_test("BFu31i_Vp_Us");
    static STRUCT_IF_C BFu31i_Vp_Us lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu31i_Vp_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_Us, BFu31i_Vp_Us)
//============================================================================


struct  BFu31i_Vp_Vp  {
  unsigned int v1:31;
  void *v2;
  void *v3;
};
//SIG(1 BFu31i_Vp_Vp) C1{ Fi:31 Fp[2]}



static void Test_BFu31i_Vp_Vp()
{
  {
    init_simple_test("BFu31i_Vp_Vp");
    static STRUCT_IF_C BFu31i_Vp_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu31i_Vp_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31i_Vp_Vp, BFu31i_Vp_Vp)
//============================================================================


struct  BFu31ll  {
  __tsu64 v1:31;
};
//SIG(1 BFu31ll) C1{ FL:31}



static void Test_BFu31ll()
{
  {
    init_simple_test("BFu31ll");
    static STRUCT_IF_C BFu31ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll, BFu31ll)
//============================================================================


struct  BFu31ll_BFs31i  {
  __tsu64 v1:31;
  signed int v2:31;
};
//SIG(1 BFu31ll_BFs31i) C1{ FL:31 Fi:31}



static void Test_BFu31ll_BFs31i()
{
  {
    init_simple_test("BFu31ll_BFs31i");
    static STRUCT_IF_C BFu31ll_BFs31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31i, BFu31ll_BFs31i)
//============================================================================


struct  BFu31ll_BFs31i_BFs31i  {
  __tsu64 v1:31;
  signed int v2:31;
  signed int v3:31;
};
//SIG(1 BFu31ll_BFs31i_BFs31i) C1{ FL:31 Fi:31 Fi:31}



static void Test_BFu31ll_BFs31i_BFs31i()
{
  {
    init_simple_test("BFu31ll_BFs31i_BFs31i");
    static STRUCT_IF_C BFu31ll_BFs31i_BFs31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFs31i_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31i_BFs31i, BFu31ll_BFs31i_BFs31i)
//============================================================================


struct  BFu31ll_BFs31i_BFs31i_BFs31i  {
  __tsu64 v1:31;
  signed int v2:31;
  signed int v3:31;
  signed int v4:31;
};
//SIG(1 BFu31ll_BFs31i_BFs31i_BFs31i) C1{ FL:31 Fi:31 Fi:31 Fi:31}



static void Test_BFu31ll_BFs31i_BFs31i_BFs31i()
{
  {
    init_simple_test("BFu31ll_BFs31i_BFs31i_BFs31i");
    static STRUCT_IF_C BFu31ll_BFs31i_BFs31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31i_BFs31i_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31i_BFs31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFs31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFs31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31i_BFs31i_BFs31i, BFu31ll_BFs31i_BFs31i_BFs31i)
//============================================================================


struct  BFu31ll_BFs31i_BFs31i_BFs31ll  {
  __tsu64 v1:31;
  signed int v2:31;
  signed int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31ll_BFs31i_BFs31i_BFs31ll) C1{ FL:31 Fi:31 Fi:31 FL:31}



static void Test_BFu31ll_BFs31i_BFs31i_BFs31ll()
{
  {
    init_simple_test("BFu31ll_BFs31i_BFs31i_BFs31ll");
    static STRUCT_IF_C BFu31ll_BFs31i_BFs31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31i_BFs31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31i_BFs31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31ll_BFs31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFs31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31i_BFs31i_BFs31ll, BFu31ll_BFs31i_BFs31i_BFs31ll)
//============================================================================


struct  BFu31ll_BFs31i_BFs31i_BFu31i  {
  __tsu64 v1:31;
  signed int v2:31;
  signed int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31ll_BFs31i_BFs31i_BFu31i) C1{ FL:31 Fi:31 Fi:31 Fi:31}



static void Test_BFu31ll_BFs31i_BFs31i_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFs31i_BFs31i_BFu31i");
    static STRUCT_IF_C BFu31ll_BFs31i_BFs31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31i_BFs31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31i_BFs31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFs31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFs31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31i_BFs31i_BFu31i, BFu31ll_BFs31i_BFs31i_BFu31i)
//============================================================================


struct  BFu31ll_BFs31i_BFs31i_BFu31ll  {
  __tsu64 v1:31;
  signed int v2:31;
  signed int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31ll_BFs31i_BFs31i_BFu31ll) C1{ FL:31 Fi:31 Fi:31 FL:31}



static void Test_BFu31ll_BFs31i_BFs31i_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFs31i_BFs31i_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFs31i_BFs31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31i_BFs31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31i_BFs31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31ll_BFs31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFs31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31i_BFs31i_BFu31ll, BFu31ll_BFs31i_BFs31i_BFu31ll)
//============================================================================


struct  BFu31ll_BFs31i_BFs31ll  {
  __tsu64 v1:31;
  signed int v2:31;
  signed __tsi64 v3:31;
};
//SIG(1 BFu31ll_BFs31i_BFs31ll) C1{ FL:31 Fi:31 FL:31}



static void Test_BFu31ll_BFs31i_BFs31ll()
{
  {
    init_simple_test("BFu31ll_BFs31i_BFs31ll");
    static STRUCT_IF_C BFu31ll_BFs31i_BFs31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFs31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31i_BFs31ll, BFu31ll_BFs31i_BFs31ll)
//============================================================================


struct  BFu31ll_BFs31i_BFs31ll_BFs31i  {
  __tsu64 v1:31;
  signed int v2:31;
  signed __tsi64 v3:31;
  signed int v4:31;
};
//SIG(1 BFu31ll_BFs31i_BFs31ll_BFs31i) C1{ FL:31 Fi:31 FL:31 Fi:31}



static void Test_BFu31ll_BFs31i_BFs31ll_BFs31i()
{
  {
    init_simple_test("BFu31ll_BFs31i_BFs31ll_BFs31i");
    static STRUCT_IF_C BFu31ll_BFs31i_BFs31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31i_BFs31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31i_BFs31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31ll_BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFs31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFs31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31i_BFs31ll_BFs31i, BFu31ll_BFs31i_BFs31ll_BFs31i)
//============================================================================


struct  BFu31ll_BFs31i_BFs31ll_BFs31ll  {
  __tsu64 v1:31;
  signed int v2:31;
  signed __tsi64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31ll_BFs31i_BFs31ll_BFs31ll) C1{ FL:31 Fi:31 FL:31 FL:31}



static void Test_BFu31ll_BFs31i_BFs31ll_BFs31ll()
{
  {
    init_simple_test("BFu31ll_BFs31i_BFs31ll_BFs31ll");
    static STRUCT_IF_C BFu31ll_BFs31i_BFs31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31i_BFs31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31i_BFs31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31ll_BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFu31ll_BFs31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFs31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31i_BFs31ll_BFs31ll, BFu31ll_BFs31i_BFs31ll_BFs31ll)
//============================================================================


struct  BFu31ll_BFs31i_BFs31ll_BFu31i  {
  __tsu64 v1:31;
  signed int v2:31;
  signed __tsi64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31ll_BFs31i_BFs31ll_BFu31i) C1{ FL:31 Fi:31 FL:31 Fi:31}



static void Test_BFu31ll_BFs31i_BFs31ll_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFs31i_BFs31ll_BFu31i");
    static STRUCT_IF_C BFu31ll_BFs31i_BFs31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31i_BFs31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31i_BFs31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31ll_BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFs31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFs31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31i_BFs31ll_BFu31i, BFu31ll_BFs31i_BFs31ll_BFu31i)
//============================================================================


struct  BFu31ll_BFs31i_BFs31ll_BFu31ll  {
  __tsu64 v1:31;
  signed int v2:31;
  signed __tsi64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31ll_BFs31i_BFs31ll_BFu31ll) C1{ FL:31 Fi:31 FL:31 FL:31}



static void Test_BFu31ll_BFs31i_BFs31ll_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFs31i_BFs31ll_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFs31i_BFs31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31i_BFs31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31i_BFs31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31ll_BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFu31ll_BFs31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFs31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31i_BFs31ll_BFu31ll, BFu31ll_BFs31i_BFs31ll_BFu31ll)
//============================================================================


struct  BFu31ll_BFs31i_BFu31i  {
  __tsu64 v1:31;
  signed int v2:31;
  unsigned int v3:31;
};
//SIG(1 BFu31ll_BFs31i_BFu31i) C1{ FL:31 Fi:31 Fi:31}



static void Test_BFu31ll_BFs31i_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFs31i_BFu31i");
    static STRUCT_IF_C BFu31ll_BFs31i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFs31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31i_BFu31i, BFu31ll_BFs31i_BFu31i)
//============================================================================


struct  BFu31ll_BFs31i_BFu31i_BFs31i  {
  __tsu64 v1:31;
  signed int v2:31;
  unsigned int v3:31;
  signed int v4:31;
};
//SIG(1 BFu31ll_BFs31i_BFu31i_BFs31i) C1{ FL:31 Fi:31 Fi:31 Fi:31}



static void Test_BFu31ll_BFs31i_BFu31i_BFs31i()
{
  {
    init_simple_test("BFu31ll_BFs31i_BFu31i_BFs31i");
    static STRUCT_IF_C BFu31ll_BFs31i_BFu31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31i_BFu31i_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31i_BFu31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFs31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFu31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31i_BFu31i_BFs31i, BFu31ll_BFs31i_BFu31i_BFs31i)
//============================================================================


struct  BFu31ll_BFs31i_BFu31i_BFs31ll  {
  __tsu64 v1:31;
  signed int v2:31;
  unsigned int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31ll_BFs31i_BFu31i_BFs31ll) C1{ FL:31 Fi:31 Fi:31 FL:31}



static void Test_BFu31ll_BFs31i_BFu31i_BFs31ll()
{
  {
    init_simple_test("BFu31ll_BFs31i_BFu31i_BFs31ll");
    static STRUCT_IF_C BFu31ll_BFs31i_BFu31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31i_BFu31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31i_BFu31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31ll_BFs31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFu31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31i_BFu31i_BFs31ll, BFu31ll_BFs31i_BFu31i_BFs31ll)
//============================================================================


struct  BFu31ll_BFs31i_BFu31i_BFu31i  {
  __tsu64 v1:31;
  signed int v2:31;
  unsigned int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31ll_BFs31i_BFu31i_BFu31i) C1{ FL:31 Fi:31 Fi:31 Fi:31}



static void Test_BFu31ll_BFs31i_BFu31i_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFs31i_BFu31i_BFu31i");
    static STRUCT_IF_C BFu31ll_BFs31i_BFu31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31i_BFu31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31i_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFs31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31i_BFu31i_BFu31i, BFu31ll_BFs31i_BFu31i_BFu31i)
//============================================================================


struct  BFu31ll_BFs31i_BFu31i_BFu31ll  {
  __tsu64 v1:31;
  signed int v2:31;
  unsigned int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31ll_BFs31i_BFu31i_BFu31ll) C1{ FL:31 Fi:31 Fi:31 FL:31}



static void Test_BFu31ll_BFs31i_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFs31i_BFu31i_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFs31i_BFu31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31i_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31i_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31ll_BFs31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31i_BFu31i_BFu31ll, BFu31ll_BFs31i_BFu31i_BFu31ll)
//============================================================================


struct  BFu31ll_BFs31i_BFu31ll  {
  __tsu64 v1:31;
  signed int v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFu31ll_BFs31i_BFu31ll) C1{ FL:31 Fi:31 FL:31}



static void Test_BFu31ll_BFs31i_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFs31i_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFs31i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFs31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31i_BFu31ll, BFu31ll_BFs31i_BFu31ll)
//============================================================================


struct  BFu31ll_BFs31i_BFu31ll_BFs31i  {
  __tsu64 v1:31;
  signed int v2:31;
  __tsu64 v3:31;
  signed int v4:31;
};
//SIG(1 BFu31ll_BFs31i_BFu31ll_BFs31i) C1{ FL:31 Fi:31 FL:31 Fi:31}



static void Test_BFu31ll_BFs31i_BFu31ll_BFs31i()
{
  {
    init_simple_test("BFu31ll_BFs31i_BFu31ll_BFs31i");
    static STRUCT_IF_C BFu31ll_BFs31i_BFu31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31i_BFu31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31i_BFu31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31ll_BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFs31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFu31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31i_BFu31ll_BFs31i, BFu31ll_BFs31i_BFu31ll_BFs31i)
//============================================================================


struct  BFu31ll_BFs31i_BFu31ll_BFs31ll  {
  __tsu64 v1:31;
  signed int v2:31;
  __tsu64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31ll_BFs31i_BFu31ll_BFs31ll) C1{ FL:31 Fi:31 FL:31 FL:31}



static void Test_BFu31ll_BFs31i_BFu31ll_BFs31ll()
{
  {
    init_simple_test("BFu31ll_BFs31i_BFu31ll_BFs31ll");
    static STRUCT_IF_C BFu31ll_BFs31i_BFu31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31i_BFu31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31i_BFu31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31ll_BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFu31ll_BFs31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFu31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31i_BFu31ll_BFs31ll, BFu31ll_BFs31i_BFu31ll_BFs31ll)
//============================================================================


struct  BFu31ll_BFs31i_BFu31ll_BFu31i  {
  __tsu64 v1:31;
  signed int v2:31;
  __tsu64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31ll_BFs31i_BFu31ll_BFu31i) C1{ FL:31 Fi:31 FL:31 Fi:31}



static void Test_BFu31ll_BFs31i_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFs31i_BFu31ll_BFu31i");
    static STRUCT_IF_C BFu31ll_BFs31i_BFu31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31i_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31i_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31ll_BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFs31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31i_BFu31ll_BFu31i, BFu31ll_BFs31i_BFu31ll_BFu31i)
//============================================================================


struct  BFu31ll_BFs31i_BFu31ll_BFu31ll  {
  __tsu64 v1:31;
  signed int v2:31;
  __tsu64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31ll_BFs31i_BFu31ll_BFu31ll) C1{ FL:31 Fi:31 FL:31 FL:31}



static void Test_BFu31ll_BFs31i_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFs31i_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFs31i_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31i_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31i_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31ll_BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFu31ll_BFs31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_ull(1LL<<30), "BFu31ll_BFs31i_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31i_BFu31ll_BFu31ll, BFu31ll_BFs31i_BFu31ll_BFu31ll)
//============================================================================


struct  BFu31ll_BFs31ll  {
  __tsu64 v1:31;
  signed __tsi64 v2:31;
};
//SIG(1 BFu31ll_BFs31ll) C1{ FL:31 FL:31}



static void Test_BFu31ll_BFs31ll()
{
  {
    init_simple_test("BFu31ll_BFs31ll");
    static STRUCT_IF_C BFu31ll_BFs31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31ll, BFu31ll_BFs31ll)
//============================================================================


struct  BFu31ll_BFs31ll_BFs31i  {
  __tsu64 v1:31;
  signed __tsi64 v2:31;
  signed int v3:31;
};
//SIG(1 BFu31ll_BFs31ll_BFs31i) C1{ FL:31 FL:31 Fi:31}



static void Test_BFu31ll_BFs31ll_BFs31i()
{
  {
    init_simple_test("BFu31ll_BFs31ll_BFs31i");
    static STRUCT_IF_C BFu31ll_BFs31ll_BFs31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFs31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31ll_BFs31i, BFu31ll_BFs31ll_BFs31i)
//============================================================================


struct  BFu31ll_BFs31ll_BFs31i_BFs31i  {
  __tsu64 v1:31;
  signed __tsi64 v2:31;
  signed int v3:31;
  signed int v4:31;
};
//SIG(1 BFu31ll_BFs31ll_BFs31i_BFs31i) C1{ FL:31 FL:31 Fi:31 Fi:31}



static void Test_BFu31ll_BFs31ll_BFs31i_BFs31i()
{
  {
    init_simple_test("BFu31ll_BFs31ll_BFs31i_BFs31i");
    static STRUCT_IF_C BFu31ll_BFs31ll_BFs31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31ll_BFs31i_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31ll_BFs31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFs31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFs31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31ll_BFs31i_BFs31i, BFu31ll_BFs31ll_BFs31i_BFs31i)
//============================================================================


struct  BFu31ll_BFs31ll_BFs31i_BFs31ll  {
  __tsu64 v1:31;
  signed __tsi64 v2:31;
  signed int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31ll_BFs31ll_BFs31i_BFs31ll) C1{ FL:31 FL:31 Fi:31 FL:31}



static void Test_BFu31ll_BFs31ll_BFs31i_BFs31ll()
{
  {
    init_simple_test("BFu31ll_BFs31ll_BFs31i_BFs31ll");
    static STRUCT_IF_C BFu31ll_BFs31ll_BFs31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31ll_BFs31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31ll_BFs31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31ll_BFs31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFs31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31ll_BFs31i_BFs31ll, BFu31ll_BFs31ll_BFs31i_BFs31ll)
//============================================================================


struct  BFu31ll_BFs31ll_BFs31i_BFu31i  {
  __tsu64 v1:31;
  signed __tsi64 v2:31;
  signed int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31ll_BFs31ll_BFs31i_BFu31i) C1{ FL:31 FL:31 Fi:31 Fi:31}



static void Test_BFu31ll_BFs31ll_BFs31i_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFs31ll_BFs31i_BFu31i");
    static STRUCT_IF_C BFu31ll_BFs31ll_BFs31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31ll_BFs31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31ll_BFs31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFs31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFs31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31ll_BFs31i_BFu31i, BFu31ll_BFs31ll_BFs31i_BFu31i)
//============================================================================


struct  BFu31ll_BFs31ll_BFs31i_BFu31ll  {
  __tsu64 v1:31;
  signed __tsi64 v2:31;
  signed int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31ll_BFs31ll_BFs31i_BFu31ll) C1{ FL:31 FL:31 Fi:31 FL:31}



static void Test_BFu31ll_BFs31ll_BFs31i_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFs31ll_BFs31i_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFs31ll_BFs31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31ll_BFs31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31ll_BFs31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31ll_BFs31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFs31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31ll_BFs31i_BFu31ll, BFu31ll_BFs31ll_BFs31i_BFu31ll)
//============================================================================


struct  BFu31ll_BFs31ll_BFs31ll  {
  __tsu64 v1:31;
  signed __tsi64 v2:31;
  signed __tsi64 v3:31;
};
//SIG(1 BFu31ll_BFs31ll_BFs31ll) C1{ FL:31 FL:31 FL:31}



static void Test_BFu31ll_BFs31ll_BFs31ll()
{
  {
    init_simple_test("BFu31ll_BFs31ll_BFs31ll");
    static STRUCT_IF_C BFu31ll_BFs31ll_BFs31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFs31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31ll_BFs31ll, BFu31ll_BFs31ll_BFs31ll)
//============================================================================


struct  BFu31ll_BFs31ll_BFs31ll_BFs31i  {
  __tsu64 v1:31;
  signed __tsi64 v2:31;
  signed __tsi64 v3:31;
  signed int v4:31;
};
//SIG(1 BFu31ll_BFs31ll_BFs31ll_BFs31i) C1{ FL:31 FL:31 FL:31 Fi:31}



static void Test_BFu31ll_BFs31ll_BFs31ll_BFs31i()
{
  {
    init_simple_test("BFu31ll_BFs31ll_BFs31ll_BFs31i");
    static STRUCT_IF_C BFu31ll_BFs31ll_BFs31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31ll_BFs31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31ll_BFs31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31ll_BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFs31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFs31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31ll_BFs31ll_BFs31i, BFu31ll_BFs31ll_BFs31ll_BFs31i)
//============================================================================


struct  BFu31ll_BFs31ll_BFs31ll_BFs31ll  {
  __tsu64 v1:31;
  signed __tsi64 v2:31;
  signed __tsi64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31ll_BFs31ll_BFs31ll_BFs31ll) C1{ FL:31 FL:31 FL:31 FL:31}



static void Test_BFu31ll_BFs31ll_BFs31ll_BFs31ll()
{
  {
    init_simple_test("BFu31ll_BFs31ll_BFs31ll_BFs31ll");
    static STRUCT_IF_C BFu31ll_BFs31ll_BFs31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31ll_BFs31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31ll_BFs31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31ll_BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFu31ll_BFs31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFs31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31ll_BFs31ll_BFs31ll, BFu31ll_BFs31ll_BFs31ll_BFs31ll)
//============================================================================


struct  BFu31ll_BFs31ll_BFs31ll_BFu31i  {
  __tsu64 v1:31;
  signed __tsi64 v2:31;
  signed __tsi64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31ll_BFs31ll_BFs31ll_BFu31i) C1{ FL:31 FL:31 FL:31 Fi:31}



static void Test_BFu31ll_BFs31ll_BFs31ll_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFs31ll_BFs31ll_BFu31i");
    static STRUCT_IF_C BFu31ll_BFs31ll_BFs31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31ll_BFs31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31ll_BFs31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31ll_BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFs31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFs31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31ll_BFs31ll_BFu31i, BFu31ll_BFs31ll_BFs31ll_BFu31i)
//============================================================================


struct  BFu31ll_BFs31ll_BFs31ll_BFu31ll  {
  __tsu64 v1:31;
  signed __tsi64 v2:31;
  signed __tsi64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31ll_BFs31ll_BFs31ll_BFu31ll) C1{ FL:31 FL:31 FL:31 FL:31}



static void Test_BFu31ll_BFs31ll_BFs31ll_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFs31ll_BFs31ll_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFs31ll_BFs31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31ll_BFs31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31ll_BFs31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31ll_BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFu31ll_BFs31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFs31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31ll_BFs31ll_BFu31ll, BFu31ll_BFs31ll_BFs31ll_BFu31ll)
//============================================================================


struct  BFu31ll_BFs31ll_BFu31i  {
  __tsu64 v1:31;
  signed __tsi64 v2:31;
  unsigned int v3:31;
};
//SIG(1 BFu31ll_BFs31ll_BFu31i) C1{ FL:31 FL:31 Fi:31}



static void Test_BFu31ll_BFs31ll_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFs31ll_BFu31i");
    static STRUCT_IF_C BFu31ll_BFs31ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFs31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31ll_BFu31i, BFu31ll_BFs31ll_BFu31i)
//============================================================================


struct  BFu31ll_BFs31ll_BFu31i_BFs31i  {
  __tsu64 v1:31;
  signed __tsi64 v2:31;
  unsigned int v3:31;
  signed int v4:31;
};
//SIG(1 BFu31ll_BFs31ll_BFu31i_BFs31i) C1{ FL:31 FL:31 Fi:31 Fi:31}



static void Test_BFu31ll_BFs31ll_BFu31i_BFs31i()
{
  {
    init_simple_test("BFu31ll_BFs31ll_BFu31i_BFs31i");
    static STRUCT_IF_C BFu31ll_BFs31ll_BFu31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31ll_BFu31i_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31ll_BFu31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFs31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFu31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31ll_BFu31i_BFs31i, BFu31ll_BFs31ll_BFu31i_BFs31i)
//============================================================================


struct  BFu31ll_BFs31ll_BFu31i_BFs31ll  {
  __tsu64 v1:31;
  signed __tsi64 v2:31;
  unsigned int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31ll_BFs31ll_BFu31i_BFs31ll) C1{ FL:31 FL:31 Fi:31 FL:31}



static void Test_BFu31ll_BFs31ll_BFu31i_BFs31ll()
{
  {
    init_simple_test("BFu31ll_BFs31ll_BFu31i_BFs31ll");
    static STRUCT_IF_C BFu31ll_BFs31ll_BFu31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31ll_BFu31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31ll_BFu31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31ll_BFs31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFu31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31ll_BFu31i_BFs31ll, BFu31ll_BFs31ll_BFu31i_BFs31ll)
//============================================================================


struct  BFu31ll_BFs31ll_BFu31i_BFu31i  {
  __tsu64 v1:31;
  signed __tsi64 v2:31;
  unsigned int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31ll_BFs31ll_BFu31i_BFu31i) C1{ FL:31 FL:31 Fi:31 Fi:31}



static void Test_BFu31ll_BFs31ll_BFu31i_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFs31ll_BFu31i_BFu31i");
    static STRUCT_IF_C BFu31ll_BFs31ll_BFu31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31ll_BFu31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31ll_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFs31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31ll_BFu31i_BFu31i, BFu31ll_BFs31ll_BFu31i_BFu31i)
//============================================================================


struct  BFu31ll_BFs31ll_BFu31i_BFu31ll  {
  __tsu64 v1:31;
  signed __tsi64 v2:31;
  unsigned int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31ll_BFs31ll_BFu31i_BFu31ll) C1{ FL:31 FL:31 Fi:31 FL:31}



static void Test_BFu31ll_BFs31ll_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFs31ll_BFu31i_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFs31ll_BFu31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31ll_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31ll_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31ll_BFs31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31ll_BFu31i_BFu31ll, BFu31ll_BFs31ll_BFu31i_BFu31ll)
//============================================================================


struct  BFu31ll_BFs31ll_BFu31ll  {
  __tsu64 v1:31;
  signed __tsi64 v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFu31ll_BFs31ll_BFu31ll) C1{ FL:31 FL:31 FL:31}



static void Test_BFu31ll_BFs31ll_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFs31ll_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFs31ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFs31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31ll_BFu31ll, BFu31ll_BFs31ll_BFu31ll)
//============================================================================


struct  BFu31ll_BFs31ll_BFu31ll_BFs31i  {
  __tsu64 v1:31;
  signed __tsi64 v2:31;
  __tsu64 v3:31;
  signed int v4:31;
};
//SIG(1 BFu31ll_BFs31ll_BFu31ll_BFs31i) C1{ FL:31 FL:31 FL:31 Fi:31}



static void Test_BFu31ll_BFs31ll_BFu31ll_BFs31i()
{
  {
    init_simple_test("BFu31ll_BFs31ll_BFu31ll_BFs31i");
    static STRUCT_IF_C BFu31ll_BFs31ll_BFu31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31ll_BFu31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31ll_BFu31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31ll_BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFs31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFu31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31ll_BFu31ll_BFs31i, BFu31ll_BFs31ll_BFu31ll_BFs31i)
//============================================================================


struct  BFu31ll_BFs31ll_BFu31ll_BFs31ll  {
  __tsu64 v1:31;
  signed __tsi64 v2:31;
  __tsu64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31ll_BFs31ll_BFu31ll_BFs31ll) C1{ FL:31 FL:31 FL:31 FL:31}



static void Test_BFu31ll_BFs31ll_BFu31ll_BFs31ll()
{
  {
    init_simple_test("BFu31ll_BFs31ll_BFu31ll_BFs31ll");
    static STRUCT_IF_C BFu31ll_BFs31ll_BFu31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31ll_BFu31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31ll_BFu31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31ll_BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFu31ll_BFs31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFu31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31ll_BFu31ll_BFs31ll, BFu31ll_BFs31ll_BFu31ll_BFs31ll)
//============================================================================


struct  BFu31ll_BFs31ll_BFu31ll_BFu31i  {
  __tsu64 v1:31;
  signed __tsi64 v2:31;
  __tsu64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31ll_BFs31ll_BFu31ll_BFu31i) C1{ FL:31 FL:31 FL:31 Fi:31}



static void Test_BFu31ll_BFs31ll_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFs31ll_BFu31ll_BFu31i");
    static STRUCT_IF_C BFu31ll_BFs31ll_BFu31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31ll_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31ll_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31ll_BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFs31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31ll_BFu31ll_BFu31i, BFu31ll_BFs31ll_BFu31ll_BFu31i)
//============================================================================


struct  BFu31ll_BFs31ll_BFu31ll_BFu31ll  {
  __tsu64 v1:31;
  signed __tsi64 v2:31;
  __tsu64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31ll_BFs31ll_BFu31ll_BFu31ll) C1{ FL:31 FL:31 FL:31 FL:31}



static void Test_BFu31ll_BFs31ll_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFs31ll_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFs31ll_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFs31ll_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFs31ll_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31ll_BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFu31ll_BFs31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_ull(1LL<<30), "BFu31ll_BFs31ll_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFs31ll_BFu31ll_BFu31ll, BFu31ll_BFs31ll_BFu31ll_BFu31ll)
//============================================================================


struct  BFu31ll_BFu15i  {
  __tsu64 v1:31;
  unsigned int v2:15;
};
//SIG(1 BFu31ll_BFu15i) C1{ FL:31 Fi:15}



static void Test_BFu31ll_BFu15i()
{
  {
    init_simple_test("BFu31ll_BFu15i");
    static STRUCT_IF_C BFu31ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i, BFu31ll_BFu15i)
//============================================================================


struct  BFu31ll_BFu15i_BFu15i  {
  __tsu64 v1:31;
  unsigned int v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu31ll_BFu15i_BFu15i) C1{ FL:31 Fi:15 Fi:15}



static void Test_BFu31ll_BFu15i_BFu15i()
{
  {
    init_simple_test("BFu31ll_BFu15i_BFu15i");
    static STRUCT_IF_C BFu31ll_BFu15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 5, 7, 15, 1, "BFu31ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 5, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_BFu15i, BFu31ll_BFu15i_BFu15i)
//============================================================================


struct  BFu31ll_BFu15i_BFu15ll  {
  __tsu64 v1:31;
  unsigned int v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu31ll_BFu15i_BFu15ll) C1{ FL:31 Fi:15 FL:15}



static void Test_BFu31ll_BFu15i_BFu15ll()
{
  {
    init_simple_test("BFu31ll_BFu15i_BFu15ll");
    static STRUCT_IF_C BFu31ll_BFu15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 5, 7, 15, 1, "BFu31ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 5, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_BFu15ll, BFu31ll_BFu15i_BFu15ll)
//============================================================================


struct  BFu31ll_BFu15i_BFu15s  {
  __tsu64 v1:31;
  unsigned int v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu31ll_BFu15i_BFu15s) C1{ FL:31 Fi:15 Fs:15}



static void Test_BFu31ll_BFu15i_BFu15s()
{
  {
    init_simple_test("BFu31ll_BFu15i_BFu15s");
    static STRUCT_IF_C BFu31ll_BFu15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_BFu15s, BFu31ll_BFu15i_BFu15s)
//============================================================================


struct  BFu31ll_BFu15i_BFu16i  {
  __tsu64 v1:31;
  unsigned int v2:15;
  unsigned int v3:16;
};
//SIG(1 BFu31ll_BFu15i_BFu16i) C1{ FL:31 Fi:15 Fi:16}



static void Test_BFu31ll_BFu15i_BFu16i()
{
  {
    init_simple_test("BFu31ll_BFu15i_BFu16i");
    static STRUCT_IF_C BFu31ll_BFu15i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 5, 7, 16, 1, "BFu31ll_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 5, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu15i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_BFu16i, BFu31ll_BFu15i_BFu16i)
//============================================================================


struct  BFu31ll_BFu15i_BFu16ll  {
  __tsu64 v1:31;
  unsigned int v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu31ll_BFu15i_BFu16ll) C1{ FL:31 Fi:15 FL:16}



static void Test_BFu31ll_BFu15i_BFu16ll()
{
  {
    init_simple_test("BFu31ll_BFu15i_BFu16ll");
    static STRUCT_IF_C BFu31ll_BFu15i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 5, 7, 16, 1, "BFu31ll_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 5, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu15i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_BFu16ll, BFu31ll_BFu15i_BFu16ll)
//============================================================================


struct  BFu31ll_BFu15i_BFu16s  {
  __tsu64 v1:31;
  unsigned int v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu31ll_BFu15i_BFu16s) C1{ FL:31 Fi:15 Fs:16}



static void Test_BFu31ll_BFu15i_BFu16s()
{
  {
    init_simple_test("BFu31ll_BFu15i_BFu16s");
    static STRUCT_IF_C BFu31ll_BFu15i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31ll_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu15i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_BFu16s, BFu31ll_BFu15i_BFu16s)
//============================================================================


struct  BFu31ll_BFu15i_BFu17i  {
  __tsu64 v1:31;
  unsigned int v2:15;
  unsigned int v3:17;
};
//SIG(1 BFu31ll_BFu15i_BFu17i) C1{ FL:31 Fi:15 Fi:17}



static void Test_BFu31ll_BFu15i_BFu17i()
{
  {
    init_simple_test("BFu31ll_BFu15i_BFu17i");
    static STRUCT_IF_C BFu31ll_BFu15i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 5, 7, 17, 1, "BFu31ll_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 5, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu15i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_BFu17i, BFu31ll_BFu15i_BFu17i)
//============================================================================


struct  BFu31ll_BFu15i_BFu17ll  {
  __tsu64 v1:31;
  unsigned int v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu31ll_BFu15i_BFu17ll) C1{ FL:31 Fi:15 FL:17}



static void Test_BFu31ll_BFu15i_BFu17ll()
{
  {
    init_simple_test("BFu31ll_BFu15i_BFu17ll");
    static STRUCT_IF_C BFu31ll_BFu15i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 5, 7, 17, 1, "BFu31ll_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 5, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu15i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_BFu17ll, BFu31ll_BFu15i_BFu17ll)
//============================================================================


struct  BFu31ll_BFu15i_BFu1c  {
  __tsu64 v1:31;
  unsigned int v2:15;
  unsigned char v3:1;
};
//SIG(1 BFu31ll_BFu15i_BFu1c) C1{ FL:31 Fi:15 Fc:1}



static void Test_BFu31ll_BFu15i_BFu1c()
{
  {
    init_simple_test("BFu31ll_BFu15i_BFu1c");
    static STRUCT_IF_C BFu31ll_BFu15i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu1c");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu31ll_BFu15i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_BFu1c, BFu31ll_BFu15i_BFu1c)
//============================================================================


struct  BFu31ll_BFu15i_BFu1i  {
  __tsu64 v1:31;
  unsigned int v2:15;
  unsigned int v3:1;
};
//SIG(1 BFu31ll_BFu15i_BFu1i) C1{ FL:31 Fi:15 Fi:1}



static void Test_BFu31ll_BFu15i_BFu1i()
{
  {
    init_simple_test("BFu31ll_BFu15i_BFu1i");
    static STRUCT_IF_C BFu31ll_BFu15i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu1i");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu31ll_BFu15i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_BFu1i, BFu31ll_BFu15i_BFu1i)
//============================================================================


struct  BFu31ll_BFu15i_BFu1ll  {
  __tsu64 v1:31;
  unsigned int v2:15;
  __tsu64 v3:1;
};
//SIG(1 BFu31ll_BFu15i_BFu1ll) C1{ FL:31 Fi:15 FL:1}



static void Test_BFu31ll_BFu15i_BFu1ll()
{
  {
    init_simple_test("BFu31ll_BFu15i_BFu1ll");
    static STRUCT_IF_C BFu31ll_BFu15i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu1ll");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu31ll_BFu15i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_BFu1ll, BFu31ll_BFu15i_BFu1ll)
//============================================================================


struct  BFu31ll_BFu15i_BFu1s  {
  __tsu64 v1:31;
  unsigned int v2:15;
  unsigned short v3:1;
};
//SIG(1 BFu31ll_BFu15i_BFu1s) C1{ FL:31 Fi:15 Fs:1}



static void Test_BFu31ll_BFu15i_BFu1s()
{
  {
    init_simple_test("BFu31ll_BFu15i_BFu1s");
    static STRUCT_IF_C BFu31ll_BFu15i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu1s");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu31ll_BFu15i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_BFu1s, BFu31ll_BFu15i_BFu1s)
//============================================================================


struct  BFu31ll_BFu15i_BFu31i  {
  __tsu64 v1:31;
  unsigned int v2:15;
  unsigned int v3:31;
};
//SIG(1 BFu31ll_BFu15i_BFu31i) C1{ FL:31 Fi:15 Fi:31}



static void Test_BFu31ll_BFu15i_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFu15i_BFu31i");
    static STRUCT_IF_C BFu31ll_BFu15i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_BFu31i, BFu31ll_BFu15i_BFu31i)
//============================================================================


struct  BFu31ll_BFu15i_BFu31ll  {
  __tsu64 v1:31;
  unsigned int v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu31ll_BFu15i_BFu31ll) C1{ FL:31 Fi:15 FL:31}



static void Test_BFu31ll_BFu15i_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFu15i_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFu15i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 31, 1, "BFu31ll_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_BFu31ll, BFu31ll_BFu15i_BFu31ll)
//============================================================================


struct  BFu31ll_BFu15i_BFu32i  {
  __tsu64 v1:31;
  unsigned int v2:15;
  unsigned int v3:32;
};
//SIG(1 BFu31ll_BFu15i_BFu32i) C1{ FL:31 Fi:15 Fi:32}



static void Test_BFu31ll_BFu15i_BFu32i()
{
  {
    init_simple_test("BFu31ll_BFu15i_BFu32i");
    static STRUCT_IF_C BFu31ll_BFu15i_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31ll_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu15i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_BFu32i, BFu31ll_BFu15i_BFu32i)
//============================================================================


struct  BFu31ll_BFu15i_BFu32ll  {
  __tsu64 v1:31;
  unsigned int v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu31ll_BFu15i_BFu32ll) C1{ FL:31 Fi:15 FL:32}



static void Test_BFu31ll_BFu15i_BFu32ll()
{
  {
    init_simple_test("BFu31ll_BFu15i_BFu32ll");
    static STRUCT_IF_C BFu31ll_BFu15i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 32, 1, "BFu31ll_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu31ll_BFu15i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_BFu32ll, BFu31ll_BFu15i_BFu32ll)
//============================================================================


struct  BFu31ll_BFu15i_BFu33  {
  __tsu64 v1:31;
  unsigned int v2:15;
  __tsu64 v3:33;
};
//SIG(1 BFu31ll_BFu15i_BFu33) C1{ FL:31 Fi:15 FL:33}



static void Test_BFu31ll_BFu15i_BFu33()
{
  {
    init_simple_test("BFu31ll_BFu15i_BFu33");
    static STRUCT_IF_C BFu31ll_BFu15i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 33, 1, "BFu31ll_BFu15i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu31ll_BFu15i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_BFu33, BFu31ll_BFu15i_BFu33)
//============================================================================


struct  BFu31ll_BFu15i_BFu7c  {
  __tsu64 v1:31;
  unsigned int v2:15;
  unsigned char v3:7;
};
//SIG(1 BFu31ll_BFu15i_BFu7c) C1{ FL:31 Fi:15 Fc:7}



static void Test_BFu31ll_BFu15i_BFu7c()
{
  {
    init_simple_test("BFu31ll_BFu15i_BFu7c");
    static STRUCT_IF_C BFu31ll_BFu15i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31ll_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu15i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_BFu7c, BFu31ll_BFu15i_BFu7c)
//============================================================================


struct  BFu31ll_BFu15i_BFu7i  {
  __tsu64 v1:31;
  unsigned int v2:15;
  unsigned int v3:7;
};
//SIG(1 BFu31ll_BFu15i_BFu7i) C1{ FL:31 Fi:15 Fi:7}



static void Test_BFu31ll_BFu15i_BFu7i()
{
  {
    init_simple_test("BFu31ll_BFu15i_BFu7i");
    static STRUCT_IF_C BFu31ll_BFu15i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 5, 7, 7, 1, "BFu31ll_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 5, 7, 7, hide_ull(1LL<<6), "BFu31ll_BFu15i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_BFu7i, BFu31ll_BFu15i_BFu7i)
//============================================================================


struct  BFu31ll_BFu15i_BFu7ll  {
  __tsu64 v1:31;
  unsigned int v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu31ll_BFu15i_BFu7ll) C1{ FL:31 Fi:15 FL:7}



static void Test_BFu31ll_BFu15i_BFu7ll()
{
  {
    init_simple_test("BFu31ll_BFu15i_BFu7ll");
    static STRUCT_IF_C BFu31ll_BFu15i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu7ll");
    set_bf_and_test(lv, v3, 5, 7, 7, 1, "BFu31ll_BFu15i_BFu7ll");
    set_bf_and_test(lv, v3, 5, 7, 7, hide_ull(1LL<<6), "BFu31ll_BFu15i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_BFu7ll, BFu31ll_BFu15i_BFu7ll)
//============================================================================


struct  BFu31ll_BFu15i_BFu7s  {
  __tsu64 v1:31;
  unsigned int v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu31ll_BFu15i_BFu7s) C1{ FL:31 Fi:15 Fs:7}



static void Test_BFu31ll_BFu15i_BFu7s()
{
  {
    init_simple_test("BFu31ll_BFu15i_BFu7s");
    static STRUCT_IF_C BFu31ll_BFu15i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31ll_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu15i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_BFu7s, BFu31ll_BFu15i_BFu7s)
//============================================================================


struct  BFu31ll_BFu15i_BFu8c  {
  __tsu64 v1:31;
  unsigned int v2:15;
  unsigned char v3:8;
};
//SIG(1 BFu31ll_BFu15i_BFu8c) C1{ FL:31 Fi:15 Fc:8}



static void Test_BFu31ll_BFu15i_BFu8c()
{
  {
    init_simple_test("BFu31ll_BFu15i_BFu8c");
    static STRUCT_IF_C BFu31ll_BFu15i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31ll_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu15i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_BFu8c, BFu31ll_BFu15i_BFu8c)
//============================================================================


struct  BFu31ll_BFu15i_BFu8i  {
  __tsu64 v1:31;
  unsigned int v2:15;
  unsigned int v3:8;
};
//SIG(1 BFu31ll_BFu15i_BFu8i) C1{ FL:31 Fi:15 Fi:8}



static void Test_BFu31ll_BFu15i_BFu8i()
{
  {
    init_simple_test("BFu31ll_BFu15i_BFu8i");
    static STRUCT_IF_C BFu31ll_BFu15i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 5, 7, 8, 1, "BFu31ll_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 5, 7, 8, hide_ull(1LL<<7), "BFu31ll_BFu15i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_BFu8i, BFu31ll_BFu15i_BFu8i)
//============================================================================


struct  BFu31ll_BFu15i_BFu8ll  {
  __tsu64 v1:31;
  unsigned int v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu31ll_BFu15i_BFu8ll) C1{ FL:31 Fi:15 FL:8}



static void Test_BFu31ll_BFu15i_BFu8ll()
{
  {
    init_simple_test("BFu31ll_BFu15i_BFu8ll");
    static STRUCT_IF_C BFu31ll_BFu15i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu8ll");
    set_bf_and_test(lv, v3, 5, 7, 8, 1, "BFu31ll_BFu15i_BFu8ll");
    set_bf_and_test(lv, v3, 5, 7, 8, hide_ull(1LL<<7), "BFu31ll_BFu15i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_BFu8ll, BFu31ll_BFu15i_BFu8ll)
//============================================================================


struct  BFu31ll_BFu15i_BFu8s  {
  __tsu64 v1:31;
  unsigned int v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu31ll_BFu15i_BFu8s) C1{ FL:31 Fi:15 Fs:8}



static void Test_BFu31ll_BFu15i_BFu8s()
{
  {
    init_simple_test("BFu31ll_BFu15i_BFu8s");
    static STRUCT_IF_C BFu31ll_BFu15i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31ll_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu15i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_BFu8s, BFu31ll_BFu15i_BFu8s)
//============================================================================


struct  BFu31ll_BFu15i_BFu9i  {
  __tsu64 v1:31;
  unsigned int v2:15;
  unsigned int v3:9;
};
//SIG(1 BFu31ll_BFu15i_BFu9i) C1{ FL:31 Fi:15 Fi:9}



static void Test_BFu31ll_BFu15i_BFu9i()
{
  {
    init_simple_test("BFu31ll_BFu15i_BFu9i");
    static STRUCT_IF_C BFu31ll_BFu15i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 5, 7, 9, 1, "BFu31ll_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 5, 7, 9, hide_ull(1LL<<8), "BFu31ll_BFu15i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_BFu9i, BFu31ll_BFu15i_BFu9i)
//============================================================================


struct  BFu31ll_BFu15i_BFu9ll  {
  __tsu64 v1:31;
  unsigned int v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu31ll_BFu15i_BFu9ll) C1{ FL:31 Fi:15 FL:9}



static void Test_BFu31ll_BFu15i_BFu9ll()
{
  {
    init_simple_test("BFu31ll_BFu15i_BFu9ll");
    static STRUCT_IF_C BFu31ll_BFu15i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 5, 7, 9, 1, "BFu31ll_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 5, 7, 9, hide_ull(1LL<<8), "BFu31ll_BFu15i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_BFu9ll, BFu31ll_BFu15i_BFu9ll)
//============================================================================


struct  BFu31ll_BFu15i_BFu9s  {
  __tsu64 v1:31;
  unsigned int v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu31ll_BFu15i_BFu9s) C1{ FL:31 Fi:15 Fs:9}



static void Test_BFu31ll_BFu15i_BFu9s()
{
  {
    init_simple_test("BFu31ll_BFu15i_BFu9s");
    static STRUCT_IF_C BFu31ll_BFu15i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31ll_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu15i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_BFu9s, BFu31ll_BFu15i_BFu9s)
//============================================================================


struct  BFu31ll_BFu15i_C  {
  __tsu64 v1:31;
  unsigned int v2:15;
  char v3;
};
//SIG(1 BFu31ll_BFu15i_C) C1{ FL:31 Fi:15 Fc}



static void Test_BFu31ll_BFu15i_C()
{
  {
    init_simple_test("BFu31ll_BFu15i_C");
    static STRUCT_IF_C BFu31ll_BFu15i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_C");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_C");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_C");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu15i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_C, BFu31ll_BFu15i_C)
//============================================================================


struct  BFu31ll_BFu15i_D  {
  __tsu64 v1:31;
  unsigned int v2:15;
  double v3;
};
//SIG(1 BFu31ll_BFu15i_D) C1{ FL:31 Fi:15 FL}



static void Test_BFu31ll_BFu15i_D()
{
  {
    init_simple_test("BFu31ll_BFu15i_D");
    static STRUCT_IF_C BFu31ll_BFu15i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu15i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_D");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_D");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_D");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu15i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_D, BFu31ll_BFu15i_D)
//============================================================================


struct  BFu31ll_BFu15i_F  {
  __tsu64 v1:31;
  unsigned int v2:15;
  float v3;
};
//SIG(1 BFu31ll_BFu15i_F) C1{ FL:31 Fi:15 Fi}



static void Test_BFu31ll_BFu15i_F()
{
  {
    init_simple_test("BFu31ll_BFu15i_F");
    static STRUCT_IF_C BFu31ll_BFu15i_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_F");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_F");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_F");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu15i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_F, BFu31ll_BFu15i_F)
//============================================================================


struct  BFu31ll_BFu15i_I  {
  __tsu64 v1:31;
  unsigned int v2:15;
  int v3;
};
//SIG(1 BFu31ll_BFu15i_I) C1{ FL:31 Fi:15 Fi}



static void Test_BFu31ll_BFu15i_I()
{
  {
    init_simple_test("BFu31ll_BFu15i_I");
    static STRUCT_IF_C BFu31ll_BFu15i_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_I");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_I");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_I");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu15i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_I, BFu31ll_BFu15i_I)
//============================================================================


struct  BFu31ll_BFu15i_Ip  {
  __tsu64 v1:31;
  unsigned int v2:15;
  int *v3;
};
//SIG(1 BFu31ll_BFu15i_Ip) C1{ FL:31 Fi:15 Fp}



static void Test_BFu31ll_BFu15i_Ip()
{
  {
    init_simple_test("BFu31ll_BFu15i_Ip");
    static STRUCT_IF_C BFu31ll_BFu15i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_Ip");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu15i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_Ip, BFu31ll_BFu15i_Ip)
//============================================================================


struct  BFu31ll_BFu15i_L  {
  __tsu64 v1:31;
  unsigned int v2:15;
  __tsi64 v3;
};
//SIG(1 BFu31ll_BFu15i_L) C1{ FL:31 Fi:15 FL}



static void Test_BFu31ll_BFu15i_L()
{
  {
    init_simple_test("BFu31ll_BFu15i_L");
    static STRUCT_IF_C BFu31ll_BFu15i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu15i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_L");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_L");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_L");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu15i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_L, BFu31ll_BFu15i_L)
//============================================================================


struct  BFu31ll_BFu15i_S  {
  __tsu64 v1:31;
  unsigned int v2:15;
  short v3;
};
//SIG(1 BFu31ll_BFu15i_S) C1{ FL:31 Fi:15 Fs}



static void Test_BFu31ll_BFu15i_S()
{
  {
    init_simple_test("BFu31ll_BFu15i_S");
    static STRUCT_IF_C BFu31ll_BFu15i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_S");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_S");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_S");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu15i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_S, BFu31ll_BFu15i_S)
//============================================================================


struct  BFu31ll_BFu15i_Uc  {
  __tsu64 v1:31;
  unsigned int v2:15;
  unsigned char v3;
};
//SIG(1 BFu31ll_BFu15i_Uc) C1{ FL:31 Fi:15 Fc}



static void Test_BFu31ll_BFu15i_Uc()
{
  {
    init_simple_test("BFu31ll_BFu15i_Uc");
    static STRUCT_IF_C BFu31ll_BFu15i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_Uc");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu15i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_Uc, BFu31ll_BFu15i_Uc)
//============================================================================


struct  BFu31ll_BFu15i_Ui  {
  __tsu64 v1:31;
  unsigned int v2:15;
  unsigned int v3;
};
//SIG(1 BFu31ll_BFu15i_Ui) C1{ FL:31 Fi:15 Fi}



static void Test_BFu31ll_BFu15i_Ui()
{
  {
    init_simple_test("BFu31ll_BFu15i_Ui");
    static STRUCT_IF_C BFu31ll_BFu15i_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_Ui");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu15i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_Ui, BFu31ll_BFu15i_Ui)
//============================================================================


struct  BFu31ll_BFu15i_Ul  {
  __tsu64 v1:31;
  unsigned int v2:15;
  __tsu64 v3;
};
//SIG(1 BFu31ll_BFu15i_Ul) C1{ FL:31 Fi:15 FL}



static void Test_BFu31ll_BFu15i_Ul()
{
  {
    init_simple_test("BFu31ll_BFu15i_Ul");
    static STRUCT_IF_C BFu31ll_BFu15i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu15i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_Ul");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu15i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_Ul, BFu31ll_BFu15i_Ul)
//============================================================================


struct  BFu31ll_BFu15i_Us  {
  __tsu64 v1:31;
  unsigned int v2:15;
  unsigned short v3;
};
//SIG(1 BFu31ll_BFu15i_Us) C1{ FL:31 Fi:15 Fs}



static void Test_BFu31ll_BFu15i_Us()
{
  {
    init_simple_test("BFu31ll_BFu15i_Us");
    static STRUCT_IF_C BFu31ll_BFu15i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_Us");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_Us");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_Us");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu15i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_Us, BFu31ll_BFu15i_Us)
//============================================================================


struct  BFu31ll_BFu15i_Vp  {
  __tsu64 v1:31;
  unsigned int v2:15;
  void *v3;
};
//SIG(1 BFu31ll_BFu15i_Vp) C1{ FL:31 Fi:15 Fp}



static void Test_BFu31ll_BFu15i_Vp()
{
  {
    init_simple_test("BFu31ll_BFu15i_Vp");
    static STRUCT_IF_C BFu31ll_BFu15i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_Vp");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu15i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15i_Vp, BFu31ll_BFu15i_Vp)
//============================================================================


struct  BFu31ll_BFu15ll  {
  __tsu64 v1:31;
  __tsu64 v2:15;
};
//SIG(1 BFu31ll_BFu15ll) C1{ FL:31 FL:15}



static void Test_BFu31ll_BFu15ll()
{
  {
    init_simple_test("BFu31ll_BFu15ll");
    static STRUCT_IF_C BFu31ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll, BFu31ll_BFu15ll)
//============================================================================


struct  BFu31ll_BFu15ll_BFu15i  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu31ll_BFu15ll_BFu15i) C1{ FL:31 FL:15 Fi:15}



static void Test_BFu31ll_BFu15ll_BFu15i()
{
  {
    init_simple_test("BFu31ll_BFu15ll_BFu15i");
    static STRUCT_IF_C BFu31ll_BFu15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 5, 6, 15, 1, "BFu31ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 5, 6, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_BFu15i, BFu31ll_BFu15ll_BFu15i)
//============================================================================


struct  BFu31ll_BFu15ll_BFu15ll  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu31ll_BFu15ll_BFu15ll) C1{ FL:31 FL:15 FL:15}



static void Test_BFu31ll_BFu15ll_BFu15ll()
{
  {
    init_simple_test("BFu31ll_BFu15ll_BFu15ll");
    static STRUCT_IF_C BFu31ll_BFu15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 5, 6, 15, 1, "BFu31ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 5, 6, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_BFu15ll, BFu31ll_BFu15ll_BFu15ll)
//============================================================================


struct  BFu31ll_BFu15ll_BFu15s  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu31ll_BFu15ll_BFu15s) C1{ FL:31 FL:15 Fs:15}



static void Test_BFu31ll_BFu15ll_BFu15s()
{
  {
    init_simple_test("BFu31ll_BFu15ll_BFu15s");
    static STRUCT_IF_C BFu31ll_BFu15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_BFu15s, BFu31ll_BFu15ll_BFu15s)
//============================================================================


struct  BFu31ll_BFu15ll_BFu16i  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  unsigned int v3:16;
};
//SIG(1 BFu31ll_BFu15ll_BFu16i) C1{ FL:31 FL:15 Fi:16}



static void Test_BFu31ll_BFu15ll_BFu16i()
{
  {
    init_simple_test("BFu31ll_BFu15ll_BFu16i");
    static STRUCT_IF_C BFu31ll_BFu15ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu16i");
    set_bf_and_test(lv, v3, 5, 6, 16, 1, "BFu31ll_BFu15ll_BFu16i");
    set_bf_and_test(lv, v3, 5, 6, 16, hide_ull(1LL<<15), "BFu31ll_BFu15ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_BFu16i, BFu31ll_BFu15ll_BFu16i)
//============================================================================


struct  BFu31ll_BFu15ll_BFu16ll  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu31ll_BFu15ll_BFu16ll) C1{ FL:31 FL:15 FL:16}



static void Test_BFu31ll_BFu15ll_BFu16ll()
{
  {
    init_simple_test("BFu31ll_BFu15ll_BFu16ll");
    static STRUCT_IF_C BFu31ll_BFu15ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v3, 5, 6, 16, 1, "BFu31ll_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v3, 5, 6, 16, hide_ull(1LL<<15), "BFu31ll_BFu15ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_BFu16ll, BFu31ll_BFu15ll_BFu16ll)
//============================================================================


struct  BFu31ll_BFu15ll_BFu16s  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu31ll_BFu15ll_BFu16s) C1{ FL:31 FL:15 Fs:16}



static void Test_BFu31ll_BFu15ll_BFu16s()
{
  {
    init_simple_test("BFu31ll_BFu15ll_BFu16s");
    static STRUCT_IF_C BFu31ll_BFu15ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31ll_BFu15ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu15ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_BFu16s, BFu31ll_BFu15ll_BFu16s)
//============================================================================


struct  BFu31ll_BFu15ll_BFu17i  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  unsigned int v3:17;
};
//SIG(1 BFu31ll_BFu15ll_BFu17i) C1{ FL:31 FL:15 Fi:17}



static void Test_BFu31ll_BFu15ll_BFu17i()
{
  {
    init_simple_test("BFu31ll_BFu15ll_BFu17i");
    static STRUCT_IF_C BFu31ll_BFu15ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu17i");
    set_bf_and_test(lv, v3, 5, 6, 17, 1, "BFu31ll_BFu15ll_BFu17i");
    set_bf_and_test(lv, v3, 5, 6, 17, hide_ull(1LL<<16), "BFu31ll_BFu15ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_BFu17i, BFu31ll_BFu15ll_BFu17i)
//============================================================================


struct  BFu31ll_BFu15ll_BFu17ll  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu31ll_BFu15ll_BFu17ll) C1{ FL:31 FL:15 FL:17}



static void Test_BFu31ll_BFu15ll_BFu17ll()
{
  {
    init_simple_test("BFu31ll_BFu15ll_BFu17ll");
    static STRUCT_IF_C BFu31ll_BFu15ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v3, 5, 6, 17, 1, "BFu31ll_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v3, 5, 6, 17, hide_ull(1LL<<16), "BFu31ll_BFu15ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_BFu17ll, BFu31ll_BFu15ll_BFu17ll)
//============================================================================


struct  BFu31ll_BFu15ll_BFu1c  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  unsigned char v3:1;
};
//SIG(1 BFu31ll_BFu15ll_BFu1c) C1{ FL:31 FL:15 Fc:1}



static void Test_BFu31ll_BFu15ll_BFu1c()
{
  {
    init_simple_test("BFu31ll_BFu15ll_BFu1c");
    static STRUCT_IF_C BFu31ll_BFu15ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu1c");
    set_bf_and_test(lv, v3, 5, 6, 1, 1, "BFu31ll_BFu15ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_BFu1c, BFu31ll_BFu15ll_BFu1c)
//============================================================================


struct  BFu31ll_BFu15ll_BFu1i  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  unsigned int v3:1;
};
//SIG(1 BFu31ll_BFu15ll_BFu1i) C1{ FL:31 FL:15 Fi:1}



static void Test_BFu31ll_BFu15ll_BFu1i()
{
  {
    init_simple_test("BFu31ll_BFu15ll_BFu1i");
    static STRUCT_IF_C BFu31ll_BFu15ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu1i");
    set_bf_and_test(lv, v3, 5, 6, 1, 1, "BFu31ll_BFu15ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_BFu1i, BFu31ll_BFu15ll_BFu1i)
//============================================================================


struct  BFu31ll_BFu15ll_BFu1ll  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  __tsu64 v3:1;
};
//SIG(1 BFu31ll_BFu15ll_BFu1ll) C1{ FL:31 FL:15 FL:1}



static void Test_BFu31ll_BFu15ll_BFu1ll()
{
  {
    init_simple_test("BFu31ll_BFu15ll_BFu1ll");
    static STRUCT_IF_C BFu31ll_BFu15ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v3, 5, 6, 1, 1, "BFu31ll_BFu15ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_BFu1ll, BFu31ll_BFu15ll_BFu1ll)
//============================================================================


struct  BFu31ll_BFu15ll_BFu1s  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  unsigned short v3:1;
};
//SIG(1 BFu31ll_BFu15ll_BFu1s) C1{ FL:31 FL:15 Fs:1}



static void Test_BFu31ll_BFu15ll_BFu1s()
{
  {
    init_simple_test("BFu31ll_BFu15ll_BFu1s");
    static STRUCT_IF_C BFu31ll_BFu15ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu1s");
    set_bf_and_test(lv, v3, 5, 6, 1, 1, "BFu31ll_BFu15ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_BFu1s, BFu31ll_BFu15ll_BFu1s)
//============================================================================


struct  BFu31ll_BFu15ll_BFu31i  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  unsigned int v3:31;
};
//SIG(1 BFu31ll_BFu15ll_BFu31i) C1{ FL:31 FL:15 Fi:31}



static void Test_BFu31ll_BFu15ll_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFu15ll_BFu31i");
    static STRUCT_IF_C BFu31ll_BFu15ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu15ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_BFu31i, BFu31ll_BFu15ll_BFu31i)
//============================================================================


struct  BFu31ll_BFu15ll_BFu31ll  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu31ll_BFu15ll_BFu31ll) C1{ FL:31 FL:15 FL:31}



static void Test_BFu31ll_BFu15ll_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFu15ll_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFu15ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,6), 31, 1, "BFu31ll_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_BFu31ll, BFu31ll_BFu15ll_BFu31ll)
//============================================================================


struct  BFu31ll_BFu15ll_BFu32i  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  unsigned int v3:32;
};
//SIG(1 BFu31ll_BFu15ll_BFu32i) C1{ FL:31 FL:15 Fi:32}



static void Test_BFu31ll_BFu15ll_BFu32i()
{
  {
    init_simple_test("BFu31ll_BFu15ll_BFu32i");
    static STRUCT_IF_C BFu31ll_BFu15ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31ll_BFu15ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu15ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_BFu32i, BFu31ll_BFu15ll_BFu32i)
//============================================================================


struct  BFu31ll_BFu15ll_BFu32ll  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu31ll_BFu15ll_BFu32ll) C1{ FL:31 FL:15 FL:32}



static void Test_BFu31ll_BFu15ll_BFu32ll()
{
  {
    init_simple_test("BFu31ll_BFu15ll_BFu32ll");
    static STRUCT_IF_C BFu31ll_BFu15ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,6), 32, 1, "BFu31ll_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,6), 32, hide_ull(1LL<<31), "BFu31ll_BFu15ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_BFu32ll, BFu31ll_BFu15ll_BFu32ll)
//============================================================================


struct  BFu31ll_BFu15ll_BFu33  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  __tsu64 v3:33;
};
//SIG(1 BFu31ll_BFu15ll_BFu33) C1{ FL:31 FL:15 FL:33}



static void Test_BFu31ll_BFu15ll_BFu33()
{
  {
    init_simple_test("BFu31ll_BFu15ll_BFu33");
    static STRUCT_IF_C BFu31ll_BFu15ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,6), 33, 1, "BFu31ll_BFu15ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,6), 33, hide_ull(1LL<<32), "BFu31ll_BFu15ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_BFu33, BFu31ll_BFu15ll_BFu33)
//============================================================================


struct  BFu31ll_BFu15ll_BFu7c  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  unsigned char v3:7;
};
//SIG(1 BFu31ll_BFu15ll_BFu7c) C1{ FL:31 FL:15 Fc:7}



static void Test_BFu31ll_BFu15ll_BFu7c()
{
  {
    init_simple_test("BFu31ll_BFu15ll_BFu7c");
    static STRUCT_IF_C BFu31ll_BFu15ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31ll_BFu15ll_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu15ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_BFu7c, BFu31ll_BFu15ll_BFu7c)
//============================================================================


struct  BFu31ll_BFu15ll_BFu7i  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  unsigned int v3:7;
};
//SIG(1 BFu31ll_BFu15ll_BFu7i) C1{ FL:31 FL:15 Fi:7}



static void Test_BFu31ll_BFu15ll_BFu7i()
{
  {
    init_simple_test("BFu31ll_BFu15ll_BFu7i");
    static STRUCT_IF_C BFu31ll_BFu15ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu7i");
    set_bf_and_test(lv, v3, 5, 6, 7, 1, "BFu31ll_BFu15ll_BFu7i");
    set_bf_and_test(lv, v3, 5, 6, 7, hide_ull(1LL<<6), "BFu31ll_BFu15ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_BFu7i, BFu31ll_BFu15ll_BFu7i)
//============================================================================


struct  BFu31ll_BFu15ll_BFu7ll  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu31ll_BFu15ll_BFu7ll) C1{ FL:31 FL:15 FL:7}



static void Test_BFu31ll_BFu15ll_BFu7ll()
{
  {
    init_simple_test("BFu31ll_BFu15ll_BFu7ll");
    static STRUCT_IF_C BFu31ll_BFu15ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v3, 5, 6, 7, 1, "BFu31ll_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v3, 5, 6, 7, hide_ull(1LL<<6), "BFu31ll_BFu15ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_BFu7ll, BFu31ll_BFu15ll_BFu7ll)
//============================================================================


struct  BFu31ll_BFu15ll_BFu7s  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu31ll_BFu15ll_BFu7s) C1{ FL:31 FL:15 Fs:7}



static void Test_BFu31ll_BFu15ll_BFu7s()
{
  {
    init_simple_test("BFu31ll_BFu15ll_BFu7s");
    static STRUCT_IF_C BFu31ll_BFu15ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31ll_BFu15ll_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu15ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_BFu7s, BFu31ll_BFu15ll_BFu7s)
//============================================================================


struct  BFu31ll_BFu15ll_BFu8c  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  unsigned char v3:8;
};
//SIG(1 BFu31ll_BFu15ll_BFu8c) C1{ FL:31 FL:15 Fc:8}



static void Test_BFu31ll_BFu15ll_BFu8c()
{
  {
    init_simple_test("BFu31ll_BFu15ll_BFu8c");
    static STRUCT_IF_C BFu31ll_BFu15ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31ll_BFu15ll_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu15ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_BFu8c, BFu31ll_BFu15ll_BFu8c)
//============================================================================


struct  BFu31ll_BFu15ll_BFu8i  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  unsigned int v3:8;
};
//SIG(1 BFu31ll_BFu15ll_BFu8i) C1{ FL:31 FL:15 Fi:8}



static void Test_BFu31ll_BFu15ll_BFu8i()
{
  {
    init_simple_test("BFu31ll_BFu15ll_BFu8i");
    static STRUCT_IF_C BFu31ll_BFu15ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu8i");
    set_bf_and_test(lv, v3, 5, 6, 8, 1, "BFu31ll_BFu15ll_BFu8i");
    set_bf_and_test(lv, v3, 5, 6, 8, hide_ull(1LL<<7), "BFu31ll_BFu15ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_BFu8i, BFu31ll_BFu15ll_BFu8i)
//============================================================================


struct  BFu31ll_BFu15ll_BFu8ll  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu31ll_BFu15ll_BFu8ll) C1{ FL:31 FL:15 FL:8}



static void Test_BFu31ll_BFu15ll_BFu8ll()
{
  {
    init_simple_test("BFu31ll_BFu15ll_BFu8ll");
    static STRUCT_IF_C BFu31ll_BFu15ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v3, 5, 6, 8, 1, "BFu31ll_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v3, 5, 6, 8, hide_ull(1LL<<7), "BFu31ll_BFu15ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_BFu8ll, BFu31ll_BFu15ll_BFu8ll)
//============================================================================


struct  BFu31ll_BFu15ll_BFu8s  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu31ll_BFu15ll_BFu8s) C1{ FL:31 FL:15 Fs:8}



static void Test_BFu31ll_BFu15ll_BFu8s()
{
  {
    init_simple_test("BFu31ll_BFu15ll_BFu8s");
    static STRUCT_IF_C BFu31ll_BFu15ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31ll_BFu15ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu15ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_BFu8s, BFu31ll_BFu15ll_BFu8s)
//============================================================================


struct  BFu31ll_BFu15ll_BFu9i  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  unsigned int v3:9;
};
//SIG(1 BFu31ll_BFu15ll_BFu9i) C1{ FL:31 FL:15 Fi:9}



static void Test_BFu31ll_BFu15ll_BFu9i()
{
  {
    init_simple_test("BFu31ll_BFu15ll_BFu9i");
    static STRUCT_IF_C BFu31ll_BFu15ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu9i");
    set_bf_and_test(lv, v3, 5, 6, 9, 1, "BFu31ll_BFu15ll_BFu9i");
    set_bf_and_test(lv, v3, 5, 6, 9, hide_ull(1LL<<8), "BFu31ll_BFu15ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_BFu9i, BFu31ll_BFu15ll_BFu9i)
//============================================================================


struct  BFu31ll_BFu15ll_BFu9ll  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu31ll_BFu15ll_BFu9ll) C1{ FL:31 FL:15 FL:9}



static void Test_BFu31ll_BFu15ll_BFu9ll()
{
  {
    init_simple_test("BFu31ll_BFu15ll_BFu9ll");
    static STRUCT_IF_C BFu31ll_BFu15ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v3, 5, 6, 9, 1, "BFu31ll_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v3, 5, 6, 9, hide_ull(1LL<<8), "BFu31ll_BFu15ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_BFu9ll, BFu31ll_BFu15ll_BFu9ll)
//============================================================================


struct  BFu31ll_BFu15ll_BFu9s  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu31ll_BFu15ll_BFu9s) C1{ FL:31 FL:15 Fs:9}



static void Test_BFu31ll_BFu15ll_BFu9s()
{
  {
    init_simple_test("BFu31ll_BFu15ll_BFu9s");
    static STRUCT_IF_C BFu31ll_BFu15ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31ll_BFu15ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu15ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_BFu9s, BFu31ll_BFu15ll_BFu9s)
//============================================================================


struct  BFu31ll_BFu15ll_C  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  char v3;
};
//SIG(1 BFu31ll_BFu15ll_C) C1{ FL:31 FL:15 Fc}



static void Test_BFu31ll_BFu15ll_C()
{
  {
    init_simple_test("BFu31ll_BFu15ll_C");
    static STRUCT_IF_C BFu31ll_BFu15ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_C");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_C");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_C");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu15ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_C, BFu31ll_BFu15ll_C)
//============================================================================


struct  BFu31ll_BFu15ll_D  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  double v3;
};
//SIG(1 BFu31ll_BFu15ll_D) C1{ FL:31 FL:15 FL}



static void Test_BFu31ll_BFu15ll_D()
{
  {
    init_simple_test("BFu31ll_BFu15ll_D");
    static STRUCT_IF_C BFu31ll_BFu15ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu15ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_D");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_D");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_D");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu15ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_D, BFu31ll_BFu15ll_D)
//============================================================================


struct  BFu31ll_BFu15ll_F  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  float v3;
};
//SIG(1 BFu31ll_BFu15ll_F) C1{ FL:31 FL:15 Fi}



static void Test_BFu31ll_BFu15ll_F()
{
  {
    init_simple_test("BFu31ll_BFu15ll_F");
    static STRUCT_IF_C BFu31ll_BFu15ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_F");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_F");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_F");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu15ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_F, BFu31ll_BFu15ll_F)
//============================================================================


struct  BFu31ll_BFu15ll_I  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  int v3;
};
//SIG(1 BFu31ll_BFu15ll_I) C1{ FL:31 FL:15 Fi}



static void Test_BFu31ll_BFu15ll_I()
{
  {
    init_simple_test("BFu31ll_BFu15ll_I");
    static STRUCT_IF_C BFu31ll_BFu15ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_I");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_I");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_I");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu15ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_I, BFu31ll_BFu15ll_I)
//============================================================================


struct  BFu31ll_BFu15ll_Ip  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  int *v3;
};
//SIG(1 BFu31ll_BFu15ll_Ip) C1{ FL:31 FL:15 Fp}



static void Test_BFu31ll_BFu15ll_Ip()
{
  {
    init_simple_test("BFu31ll_BFu15ll_Ip");
    static STRUCT_IF_C BFu31ll_BFu15ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_Ip");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_Ip");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_Ip");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu15ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_Ip, BFu31ll_BFu15ll_Ip)
//============================================================================


struct  BFu31ll_BFu15ll_L  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  __tsi64 v3;
};
//SIG(1 BFu31ll_BFu15ll_L) C1{ FL:31 FL:15 FL}



static void Test_BFu31ll_BFu15ll_L()
{
  {
    init_simple_test("BFu31ll_BFu15ll_L");
    static STRUCT_IF_C BFu31ll_BFu15ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu15ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_L");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_L");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_L");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu15ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_L, BFu31ll_BFu15ll_L)
//============================================================================


struct  BFu31ll_BFu15ll_S  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  short v3;
};
//SIG(1 BFu31ll_BFu15ll_S) C1{ FL:31 FL:15 Fs}



static void Test_BFu31ll_BFu15ll_S()
{
  {
    init_simple_test("BFu31ll_BFu15ll_S");
    static STRUCT_IF_C BFu31ll_BFu15ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_S");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_S");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_S");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu15ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_S, BFu31ll_BFu15ll_S)
//============================================================================


struct  BFu31ll_BFu15ll_Uc  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  unsigned char v3;
};
//SIG(1 BFu31ll_BFu15ll_Uc) C1{ FL:31 FL:15 Fc}



static void Test_BFu31ll_BFu15ll_Uc()
{
  {
    init_simple_test("BFu31ll_BFu15ll_Uc");
    static STRUCT_IF_C BFu31ll_BFu15ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_Uc");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_Uc");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_Uc");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu15ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_Uc, BFu31ll_BFu15ll_Uc)
//============================================================================


struct  BFu31ll_BFu15ll_Ui  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  unsigned int v3;
};
//SIG(1 BFu31ll_BFu15ll_Ui) C1{ FL:31 FL:15 Fi}



static void Test_BFu31ll_BFu15ll_Ui()
{
  {
    init_simple_test("BFu31ll_BFu15ll_Ui");
    static STRUCT_IF_C BFu31ll_BFu15ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_Ui");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_Ui");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_Ui");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu15ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_Ui, BFu31ll_BFu15ll_Ui)
//============================================================================


struct  BFu31ll_BFu15ll_Ul  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  __tsu64 v3;
};
//SIG(1 BFu31ll_BFu15ll_Ul) C1{ FL:31 FL:15 FL}



static void Test_BFu31ll_BFu15ll_Ul()
{
  {
    init_simple_test("BFu31ll_BFu15ll_Ul");
    static STRUCT_IF_C BFu31ll_BFu15ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu15ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_Ul");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_Ul");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_Ul");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu15ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_Ul, BFu31ll_BFu15ll_Ul)
//============================================================================


struct  BFu31ll_BFu15ll_Us  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  unsigned short v3;
};
//SIG(1 BFu31ll_BFu15ll_Us) C1{ FL:31 FL:15 Fs}



static void Test_BFu31ll_BFu15ll_Us()
{
  {
    init_simple_test("BFu31ll_BFu15ll_Us");
    static STRUCT_IF_C BFu31ll_BFu15ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_Us");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_Us");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_Us");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu15ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_Us, BFu31ll_BFu15ll_Us)
//============================================================================


struct  BFu31ll_BFu15ll_Vp  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  void *v3;
};
//SIG(1 BFu31ll_BFu15ll_Vp) C1{ FL:31 FL:15 Fp}



static void Test_BFu31ll_BFu15ll_Vp()
{
  {
    init_simple_test("BFu31ll_BFu15ll_Vp");
    static STRUCT_IF_C BFu31ll_BFu15ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_Vp");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_Vp");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_Vp");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu15ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15ll_Vp, BFu31ll_BFu15ll_Vp)
//============================================================================


struct  BFu31ll_BFu15s  {
  __tsu64 v1:31;
  unsigned short v2:15;
};
//SIG(1 BFu31ll_BFu15s) C1{ FL:31 Fs:15}



static void Test_BFu31ll_BFu15s()
{
  {
    init_simple_test("BFu31ll_BFu15s");
    static STRUCT_IF_C BFu31ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s, BFu31ll_BFu15s)
//============================================================================


struct  BFu31ll_BFu15s_BFu15i  {
  __tsu64 v1:31;
  unsigned short v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu31ll_BFu15s_BFu15i) C1{ FL:31 Fs:15 Fi:15}



static void Test_BFu31ll_BFu15s_BFu15i()
{
  {
    init_simple_test("BFu31ll_BFu15s_BFu15i");
    static STRUCT_IF_C BFu31ll_BFu15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 5, 7, 15, 1, "BFu31ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 5, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_BFu15i, BFu31ll_BFu15s_BFu15i)
//============================================================================


struct  BFu31ll_BFu15s_BFu15ll  {
  __tsu64 v1:31;
  unsigned short v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu31ll_BFu15s_BFu15ll) C1{ FL:31 Fs:15 FL:15}



static void Test_BFu31ll_BFu15s_BFu15ll()
{
  {
    init_simple_test("BFu31ll_BFu15s_BFu15ll");
    static STRUCT_IF_C BFu31ll_BFu15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 5, 7, 15, 1, "BFu31ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 5, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_BFu15ll, BFu31ll_BFu15s_BFu15ll)
//============================================================================


struct  BFu31ll_BFu15s_BFu15s  {
  __tsu64 v1:31;
  unsigned short v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu31ll_BFu15s_BFu15s) C1{ FL:31 Fs:15 Fs:15}



static void Test_BFu31ll_BFu15s_BFu15s()
{
  {
    init_simple_test("BFu31ll_BFu15s_BFu15s");
    static STRUCT_IF_C BFu31ll_BFu15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_BFu15s, BFu31ll_BFu15s_BFu15s)
//============================================================================


struct  BFu31ll_BFu15s_BFu16i  {
  __tsu64 v1:31;
  unsigned short v2:15;
  unsigned int v3:16;
};
//SIG(1 BFu31ll_BFu15s_BFu16i) C1{ FL:31 Fs:15 Fi:16}



static void Test_BFu31ll_BFu15s_BFu16i()
{
  {
    init_simple_test("BFu31ll_BFu15s_BFu16i");
    static STRUCT_IF_C BFu31ll_BFu15s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu16i");
    set_bf_and_test(lv, v3, 5, 7, 16, 1, "BFu31ll_BFu15s_BFu16i");
    set_bf_and_test(lv, v3, 5, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu15s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_BFu16i, BFu31ll_BFu15s_BFu16i)
//============================================================================


struct  BFu31ll_BFu15s_BFu16ll  {
  __tsu64 v1:31;
  unsigned short v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu31ll_BFu15s_BFu16ll) C1{ FL:31 Fs:15 FL:16}



static void Test_BFu31ll_BFu15s_BFu16ll()
{
  {
    init_simple_test("BFu31ll_BFu15s_BFu16ll");
    static STRUCT_IF_C BFu31ll_BFu15s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu16ll");
    set_bf_and_test(lv, v3, 5, 7, 16, 1, "BFu31ll_BFu15s_BFu16ll");
    set_bf_and_test(lv, v3, 5, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu15s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_BFu16ll, BFu31ll_BFu15s_BFu16ll)
//============================================================================


struct  BFu31ll_BFu15s_BFu16s  {
  __tsu64 v1:31;
  unsigned short v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu31ll_BFu15s_BFu16s) C1{ FL:31 Fs:15 Fs:16}



static void Test_BFu31ll_BFu15s_BFu16s()
{
  {
    init_simple_test("BFu31ll_BFu15s_BFu16s");
    static STRUCT_IF_C BFu31ll_BFu15s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31ll_BFu15s_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu15s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_BFu16s, BFu31ll_BFu15s_BFu16s)
//============================================================================


struct  BFu31ll_BFu15s_BFu17i  {
  __tsu64 v1:31;
  unsigned short v2:15;
  unsigned int v3:17;
};
//SIG(1 BFu31ll_BFu15s_BFu17i) C1{ FL:31 Fs:15 Fi:17}



static void Test_BFu31ll_BFu15s_BFu17i()
{
  {
    init_simple_test("BFu31ll_BFu15s_BFu17i");
    static STRUCT_IF_C BFu31ll_BFu15s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu17i");
    set_bf_and_test(lv, v3, 5, 7, 17, 1, "BFu31ll_BFu15s_BFu17i");
    set_bf_and_test(lv, v3, 5, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu15s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_BFu17i, BFu31ll_BFu15s_BFu17i)
//============================================================================


struct  BFu31ll_BFu15s_BFu17ll  {
  __tsu64 v1:31;
  unsigned short v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu31ll_BFu15s_BFu17ll) C1{ FL:31 Fs:15 FL:17}



static void Test_BFu31ll_BFu15s_BFu17ll()
{
  {
    init_simple_test("BFu31ll_BFu15s_BFu17ll");
    static STRUCT_IF_C BFu31ll_BFu15s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu17ll");
    set_bf_and_test(lv, v3, 5, 7, 17, 1, "BFu31ll_BFu15s_BFu17ll");
    set_bf_and_test(lv, v3, 5, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu15s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_BFu17ll, BFu31ll_BFu15s_BFu17ll)
//============================================================================


struct  BFu31ll_BFu15s_BFu1c  {
  __tsu64 v1:31;
  unsigned short v2:15;
  unsigned char v3:1;
};
//SIG(1 BFu31ll_BFu15s_BFu1c) C1{ FL:31 Fs:15 Fc:1}



static void Test_BFu31ll_BFu15s_BFu1c()
{
  {
    init_simple_test("BFu31ll_BFu15s_BFu1c");
    static STRUCT_IF_C BFu31ll_BFu15s_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu1c");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu31ll_BFu15s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_BFu1c, BFu31ll_BFu15s_BFu1c)
//============================================================================


struct  BFu31ll_BFu15s_BFu1i  {
  __tsu64 v1:31;
  unsigned short v2:15;
  unsigned int v3:1;
};
//SIG(1 BFu31ll_BFu15s_BFu1i) C1{ FL:31 Fs:15 Fi:1}



static void Test_BFu31ll_BFu15s_BFu1i()
{
  {
    init_simple_test("BFu31ll_BFu15s_BFu1i");
    static STRUCT_IF_C BFu31ll_BFu15s_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu1i");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu31ll_BFu15s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_BFu1i, BFu31ll_BFu15s_BFu1i)
//============================================================================


struct  BFu31ll_BFu15s_BFu1ll  {
  __tsu64 v1:31;
  unsigned short v2:15;
  __tsu64 v3:1;
};
//SIG(1 BFu31ll_BFu15s_BFu1ll) C1{ FL:31 Fs:15 FL:1}



static void Test_BFu31ll_BFu15s_BFu1ll()
{
  {
    init_simple_test("BFu31ll_BFu15s_BFu1ll");
    static STRUCT_IF_C BFu31ll_BFu15s_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu1ll");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu31ll_BFu15s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_BFu1ll, BFu31ll_BFu15s_BFu1ll)
//============================================================================


struct  BFu31ll_BFu15s_BFu1s  {
  __tsu64 v1:31;
  unsigned short v2:15;
  unsigned short v3:1;
};
//SIG(1 BFu31ll_BFu15s_BFu1s) C1{ FL:31 Fs:15 Fs:1}



static void Test_BFu31ll_BFu15s_BFu1s()
{
  {
    init_simple_test("BFu31ll_BFu15s_BFu1s");
    static STRUCT_IF_C BFu31ll_BFu15s_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu1s");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu31ll_BFu15s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_BFu1s, BFu31ll_BFu15s_BFu1s)
//============================================================================


struct  BFu31ll_BFu15s_BFu31i  {
  __tsu64 v1:31;
  unsigned short v2:15;
  unsigned int v3:31;
};
//SIG(1 BFu31ll_BFu15s_BFu31i) C1{ FL:31 Fs:15 Fi:31}



static void Test_BFu31ll_BFu15s_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFu15s_BFu31i");
    static STRUCT_IF_C BFu31ll_BFu15s_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu15s_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_BFu31i, BFu31ll_BFu15s_BFu31i)
//============================================================================


struct  BFu31ll_BFu15s_BFu31ll  {
  __tsu64 v1:31;
  unsigned short v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu31ll_BFu15s_BFu31ll) C1{ FL:31 Fs:15 FL:31}



static void Test_BFu31ll_BFu15s_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFu15s_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFu15s_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 31, 1, "BFu31ll_BFu15s_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_BFu31ll, BFu31ll_BFu15s_BFu31ll)
//============================================================================


struct  BFu31ll_BFu15s_BFu32i  {
  __tsu64 v1:31;
  unsigned short v2:15;
  unsigned int v3:32;
};
//SIG(1 BFu31ll_BFu15s_BFu32i) C1{ FL:31 Fs:15 Fi:32}



static void Test_BFu31ll_BFu15s_BFu32i()
{
  {
    init_simple_test("BFu31ll_BFu15s_BFu32i");
    static STRUCT_IF_C BFu31ll_BFu15s_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31ll_BFu15s_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu15s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_BFu32i, BFu31ll_BFu15s_BFu32i)
//============================================================================


struct  BFu31ll_BFu15s_BFu32ll  {
  __tsu64 v1:31;
  unsigned short v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu31ll_BFu15s_BFu32ll) C1{ FL:31 Fs:15 FL:32}



static void Test_BFu31ll_BFu15s_BFu32ll()
{
  {
    init_simple_test("BFu31ll_BFu15s_BFu32ll");
    static STRUCT_IF_C BFu31ll_BFu15s_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 32, 1, "BFu31ll_BFu15s_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu31ll_BFu15s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_BFu32ll, BFu31ll_BFu15s_BFu32ll)
//============================================================================


struct  BFu31ll_BFu15s_BFu33  {
  __tsu64 v1:31;
  unsigned short v2:15;
  __tsu64 v3:33;
};
//SIG(1 BFu31ll_BFu15s_BFu33) C1{ FL:31 Fs:15 FL:33}



static void Test_BFu31ll_BFu15s_BFu33()
{
  {
    init_simple_test("BFu31ll_BFu15s_BFu33");
    static STRUCT_IF_C BFu31ll_BFu15s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 33, 1, "BFu31ll_BFu15s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu31ll_BFu15s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_BFu33, BFu31ll_BFu15s_BFu33)
//============================================================================


struct  BFu31ll_BFu15s_BFu7c  {
  __tsu64 v1:31;
  unsigned short v2:15;
  unsigned char v3:7;
};
//SIG(1 BFu31ll_BFu15s_BFu7c) C1{ FL:31 Fs:15 Fc:7}



static void Test_BFu31ll_BFu15s_BFu7c()
{
  {
    init_simple_test("BFu31ll_BFu15s_BFu7c");
    static STRUCT_IF_C BFu31ll_BFu15s_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31ll_BFu15s_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu15s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_BFu7c, BFu31ll_BFu15s_BFu7c)
//============================================================================


struct  BFu31ll_BFu15s_BFu7i  {
  __tsu64 v1:31;
  unsigned short v2:15;
  unsigned int v3:7;
};
//SIG(1 BFu31ll_BFu15s_BFu7i) C1{ FL:31 Fs:15 Fi:7}



static void Test_BFu31ll_BFu15s_BFu7i()
{
  {
    init_simple_test("BFu31ll_BFu15s_BFu7i");
    static STRUCT_IF_C BFu31ll_BFu15s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu7i");
    set_bf_and_test(lv, v3, 5, 7, 7, 1, "BFu31ll_BFu15s_BFu7i");
    set_bf_and_test(lv, v3, 5, 7, 7, hide_ull(1LL<<6), "BFu31ll_BFu15s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_BFu7i, BFu31ll_BFu15s_BFu7i)
//============================================================================


struct  BFu31ll_BFu15s_BFu7ll  {
  __tsu64 v1:31;
  unsigned short v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu31ll_BFu15s_BFu7ll) C1{ FL:31 Fs:15 FL:7}



static void Test_BFu31ll_BFu15s_BFu7ll()
{
  {
    init_simple_test("BFu31ll_BFu15s_BFu7ll");
    static STRUCT_IF_C BFu31ll_BFu15s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu7ll");
    set_bf_and_test(lv, v3, 5, 7, 7, 1, "BFu31ll_BFu15s_BFu7ll");
    set_bf_and_test(lv, v3, 5, 7, 7, hide_ull(1LL<<6), "BFu31ll_BFu15s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_BFu7ll, BFu31ll_BFu15s_BFu7ll)
//============================================================================


struct  BFu31ll_BFu15s_BFu7s  {
  __tsu64 v1:31;
  unsigned short v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu31ll_BFu15s_BFu7s) C1{ FL:31 Fs:15 Fs:7}



static void Test_BFu31ll_BFu15s_BFu7s()
{
  {
    init_simple_test("BFu31ll_BFu15s_BFu7s");
    static STRUCT_IF_C BFu31ll_BFu15s_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31ll_BFu15s_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu15s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_BFu7s, BFu31ll_BFu15s_BFu7s)
//============================================================================


struct  BFu31ll_BFu15s_BFu8c  {
  __tsu64 v1:31;
  unsigned short v2:15;
  unsigned char v3:8;
};
//SIG(1 BFu31ll_BFu15s_BFu8c) C1{ FL:31 Fs:15 Fc:8}



static void Test_BFu31ll_BFu15s_BFu8c()
{
  {
    init_simple_test("BFu31ll_BFu15s_BFu8c");
    static STRUCT_IF_C BFu31ll_BFu15s_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31ll_BFu15s_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu15s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_BFu8c, BFu31ll_BFu15s_BFu8c)
//============================================================================


struct  BFu31ll_BFu15s_BFu8i  {
  __tsu64 v1:31;
  unsigned short v2:15;
  unsigned int v3:8;
};
//SIG(1 BFu31ll_BFu15s_BFu8i) C1{ FL:31 Fs:15 Fi:8}



static void Test_BFu31ll_BFu15s_BFu8i()
{
  {
    init_simple_test("BFu31ll_BFu15s_BFu8i");
    static STRUCT_IF_C BFu31ll_BFu15s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu8i");
    set_bf_and_test(lv, v3, 5, 7, 8, 1, "BFu31ll_BFu15s_BFu8i");
    set_bf_and_test(lv, v3, 5, 7, 8, hide_ull(1LL<<7), "BFu31ll_BFu15s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_BFu8i, BFu31ll_BFu15s_BFu8i)
//============================================================================


struct  BFu31ll_BFu15s_BFu8ll  {
  __tsu64 v1:31;
  unsigned short v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu31ll_BFu15s_BFu8ll) C1{ FL:31 Fs:15 FL:8}



static void Test_BFu31ll_BFu15s_BFu8ll()
{
  {
    init_simple_test("BFu31ll_BFu15s_BFu8ll");
    static STRUCT_IF_C BFu31ll_BFu15s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu8ll");
    set_bf_and_test(lv, v3, 5, 7, 8, 1, "BFu31ll_BFu15s_BFu8ll");
    set_bf_and_test(lv, v3, 5, 7, 8, hide_ull(1LL<<7), "BFu31ll_BFu15s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_BFu8ll, BFu31ll_BFu15s_BFu8ll)
//============================================================================


struct  BFu31ll_BFu15s_BFu8s  {
  __tsu64 v1:31;
  unsigned short v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu31ll_BFu15s_BFu8s) C1{ FL:31 Fs:15 Fs:8}



static void Test_BFu31ll_BFu15s_BFu8s()
{
  {
    init_simple_test("BFu31ll_BFu15s_BFu8s");
    static STRUCT_IF_C BFu31ll_BFu15s_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31ll_BFu15s_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu15s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_BFu8s, BFu31ll_BFu15s_BFu8s)
//============================================================================


struct  BFu31ll_BFu15s_BFu9i  {
  __tsu64 v1:31;
  unsigned short v2:15;
  unsigned int v3:9;
};
//SIG(1 BFu31ll_BFu15s_BFu9i) C1{ FL:31 Fs:15 Fi:9}



static void Test_BFu31ll_BFu15s_BFu9i()
{
  {
    init_simple_test("BFu31ll_BFu15s_BFu9i");
    static STRUCT_IF_C BFu31ll_BFu15s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu9i");
    set_bf_and_test(lv, v3, 5, 7, 9, 1, "BFu31ll_BFu15s_BFu9i");
    set_bf_and_test(lv, v3, 5, 7, 9, hide_ull(1LL<<8), "BFu31ll_BFu15s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_BFu9i, BFu31ll_BFu15s_BFu9i)
//============================================================================


struct  BFu31ll_BFu15s_BFu9ll  {
  __tsu64 v1:31;
  unsigned short v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu31ll_BFu15s_BFu9ll) C1{ FL:31 Fs:15 FL:9}



static void Test_BFu31ll_BFu15s_BFu9ll()
{
  {
    init_simple_test("BFu31ll_BFu15s_BFu9ll");
    static STRUCT_IF_C BFu31ll_BFu15s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu9ll");
    set_bf_and_test(lv, v3, 5, 7, 9, 1, "BFu31ll_BFu15s_BFu9ll");
    set_bf_and_test(lv, v3, 5, 7, 9, hide_ull(1LL<<8), "BFu31ll_BFu15s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_BFu9ll, BFu31ll_BFu15s_BFu9ll)
//============================================================================


struct  BFu31ll_BFu15s_BFu9s  {
  __tsu64 v1:31;
  unsigned short v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu31ll_BFu15s_BFu9s) C1{ FL:31 Fs:15 Fs:9}



static void Test_BFu31ll_BFu15s_BFu9s()
{
  {
    init_simple_test("BFu31ll_BFu15s_BFu9s");
    static STRUCT_IF_C BFu31ll_BFu15s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31ll_BFu15s_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu15s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_BFu9s, BFu31ll_BFu15s_BFu9s)
//============================================================================


struct  BFu31ll_BFu15s_C  {
  __tsu64 v1:31;
  unsigned short v2:15;
  char v3;
};
//SIG(1 BFu31ll_BFu15s_C) C1{ FL:31 Fs:15 Fc}



static void Test_BFu31ll_BFu15s_C()
{
  {
    init_simple_test("BFu31ll_BFu15s_C");
    static STRUCT_IF_C BFu31ll_BFu15s_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_C");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_C");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_C");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu15s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_C, BFu31ll_BFu15s_C)
//============================================================================


struct  BFu31ll_BFu15s_D  {
  __tsu64 v1:31;
  unsigned short v2:15;
  double v3;
};
//SIG(1 BFu31ll_BFu15s_D) C1{ FL:31 Fs:15 FL}



static void Test_BFu31ll_BFu15s_D()
{
  {
    init_simple_test("BFu31ll_BFu15s_D");
    static STRUCT_IF_C BFu31ll_BFu15s_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu15s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_D");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_D");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_D");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu15s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_D, BFu31ll_BFu15s_D)
//============================================================================


struct  BFu31ll_BFu15s_F  {
  __tsu64 v1:31;
  unsigned short v2:15;
  float v3;
};
//SIG(1 BFu31ll_BFu15s_F) C1{ FL:31 Fs:15 Fi}



static void Test_BFu31ll_BFu15s_F()
{
  {
    init_simple_test("BFu31ll_BFu15s_F");
    static STRUCT_IF_C BFu31ll_BFu15s_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_F");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_F");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_F");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu15s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_F, BFu31ll_BFu15s_F)
//============================================================================


struct  BFu31ll_BFu15s_I  {
  __tsu64 v1:31;
  unsigned short v2:15;
  int v3;
};
//SIG(1 BFu31ll_BFu15s_I) C1{ FL:31 Fs:15 Fi}



static void Test_BFu31ll_BFu15s_I()
{
  {
    init_simple_test("BFu31ll_BFu15s_I");
    static STRUCT_IF_C BFu31ll_BFu15s_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_I");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_I");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_I");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu15s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_I, BFu31ll_BFu15s_I)
//============================================================================


struct  BFu31ll_BFu15s_Ip  {
  __tsu64 v1:31;
  unsigned short v2:15;
  int *v3;
};
//SIG(1 BFu31ll_BFu15s_Ip) C1{ FL:31 Fs:15 Fp}



static void Test_BFu31ll_BFu15s_Ip()
{
  {
    init_simple_test("BFu31ll_BFu15s_Ip");
    static STRUCT_IF_C BFu31ll_BFu15s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_Ip");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_Ip");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_Ip");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu15s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_Ip, BFu31ll_BFu15s_Ip)
//============================================================================


struct  BFu31ll_BFu15s_L  {
  __tsu64 v1:31;
  unsigned short v2:15;
  __tsi64 v3;
};
//SIG(1 BFu31ll_BFu15s_L) C1{ FL:31 Fs:15 FL}



static void Test_BFu31ll_BFu15s_L()
{
  {
    init_simple_test("BFu31ll_BFu15s_L");
    static STRUCT_IF_C BFu31ll_BFu15s_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu15s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_L");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_L");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_L");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu15s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_L, BFu31ll_BFu15s_L)
//============================================================================


struct  BFu31ll_BFu15s_S  {
  __tsu64 v1:31;
  unsigned short v2:15;
  short v3;
};
//SIG(1 BFu31ll_BFu15s_S) C1{ FL:31 Fs:15 Fs}



static void Test_BFu31ll_BFu15s_S()
{
  {
    init_simple_test("BFu31ll_BFu15s_S");
    static STRUCT_IF_C BFu31ll_BFu15s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_S");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_S");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_S");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu15s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_S, BFu31ll_BFu15s_S)
//============================================================================


struct  BFu31ll_BFu15s_Uc  {
  __tsu64 v1:31;
  unsigned short v2:15;
  unsigned char v3;
};
//SIG(1 BFu31ll_BFu15s_Uc) C1{ FL:31 Fs:15 Fc}



static void Test_BFu31ll_BFu15s_Uc()
{
  {
    init_simple_test("BFu31ll_BFu15s_Uc");
    static STRUCT_IF_C BFu31ll_BFu15s_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_Uc");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_Uc");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_Uc");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu15s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_Uc, BFu31ll_BFu15s_Uc)
//============================================================================


struct  BFu31ll_BFu15s_Ui  {
  __tsu64 v1:31;
  unsigned short v2:15;
  unsigned int v3;
};
//SIG(1 BFu31ll_BFu15s_Ui) C1{ FL:31 Fs:15 Fi}



static void Test_BFu31ll_BFu15s_Ui()
{
  {
    init_simple_test("BFu31ll_BFu15s_Ui");
    static STRUCT_IF_C BFu31ll_BFu15s_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_Ui");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_Ui");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_Ui");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu15s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_Ui, BFu31ll_BFu15s_Ui)
//============================================================================


struct  BFu31ll_BFu15s_Ul  {
  __tsu64 v1:31;
  unsigned short v2:15;
  __tsu64 v3;
};
//SIG(1 BFu31ll_BFu15s_Ul) C1{ FL:31 Fs:15 FL}



static void Test_BFu31ll_BFu15s_Ul()
{
  {
    init_simple_test("BFu31ll_BFu15s_Ul");
    static STRUCT_IF_C BFu31ll_BFu15s_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu15s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_Ul");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_Ul");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_Ul");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu15s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_Ul, BFu31ll_BFu15s_Ul)
//============================================================================


struct  BFu31ll_BFu15s_Us  {
  __tsu64 v1:31;
  unsigned short v2:15;
  unsigned short v3;
};
//SIG(1 BFu31ll_BFu15s_Us) C1{ FL:31 Fs:15 Fs}



static void Test_BFu31ll_BFu15s_Us()
{
  {
    init_simple_test("BFu31ll_BFu15s_Us");
    static STRUCT_IF_C BFu31ll_BFu15s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_Us");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_Us");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_Us");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu15s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_Us, BFu31ll_BFu15s_Us)
//============================================================================


struct  BFu31ll_BFu15s_Vp  {
  __tsu64 v1:31;
  unsigned short v2:15;
  void *v3;
};
//SIG(1 BFu31ll_BFu15s_Vp) C1{ FL:31 Fs:15 Fp}



static void Test_BFu31ll_BFu15s_Vp()
{
  {
    init_simple_test("BFu31ll_BFu15s_Vp");
    static STRUCT_IF_C BFu31ll_BFu15s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu15s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_Vp");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_Vp");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_Vp");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu15s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu15s_Vp, BFu31ll_BFu15s_Vp)
//============================================================================


struct  BFu31ll_BFu16i  {
  __tsu64 v1:31;
  unsigned int v2:16;
};
//SIG(1 BFu31ll_BFu16i) C1{ FL:31 Fi:16}



static void Test_BFu31ll_BFu16i()
{
  {
    init_simple_test("BFu31ll_BFu16i");
    static STRUCT_IF_C BFu31ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i, BFu31ll_BFu16i)
//============================================================================


struct  BFu31ll_BFu16i_BFu15i  {
  __tsu64 v1:31;
  unsigned int v2:16;
  unsigned int v3:15;
};
//SIG(1 BFu31ll_BFu16i_BFu15i) C1{ FL:31 Fi:16 Fi:15}



static void Test_BFu31ll_BFu16i_BFu15i()
{
  {
    init_simple_test("BFu31ll_BFu16i_BFu15i");
    static STRUCT_IF_C BFu31ll_BFu16i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31ll_BFu16i_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu16i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_BFu15i, BFu31ll_BFu16i_BFu15i)
//============================================================================


struct  BFu31ll_BFu16i_BFu15ll  {
  __tsu64 v1:31;
  unsigned int v2:16;
  __tsu64 v3:15;
};
//SIG(1 BFu31ll_BFu16i_BFu15ll) C1{ FL:31 Fi:16 FL:15}



static void Test_BFu31ll_BFu16i_BFu15ll()
{
  {
    init_simple_test("BFu31ll_BFu16i_BFu15ll");
    static STRUCT_IF_C BFu31ll_BFu16i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31ll_BFu16i_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu16i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_BFu15ll, BFu31ll_BFu16i_BFu15ll)
//============================================================================


struct  BFu31ll_BFu16i_BFu15s  {
  __tsu64 v1:31;
  unsigned int v2:16;
  unsigned short v3:15;
};
//SIG(1 BFu31ll_BFu16i_BFu15s) C1{ FL:31 Fi:16 Fs:15}



static void Test_BFu31ll_BFu16i_BFu15s()
{
  {
    init_simple_test("BFu31ll_BFu16i_BFu15s");
    static STRUCT_IF_C BFu31ll_BFu16i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31ll_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu16i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_BFu15s, BFu31ll_BFu16i_BFu15s)
//============================================================================


struct  BFu31ll_BFu16i_BFu16i  {
  __tsu64 v1:31;
  unsigned int v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu31ll_BFu16i_BFu16i) C1{ FL:31 Fi:16 Fi:16}



static void Test_BFu31ll_BFu16i_BFu16i()
{
  {
    init_simple_test("BFu31ll_BFu16i_BFu16i");
    static STRUCT_IF_C BFu31ll_BFu16i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31ll_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_BFu16i, BFu31ll_BFu16i_BFu16i)
//============================================================================


struct  BFu31ll_BFu16i_BFu16ll  {
  __tsu64 v1:31;
  unsigned int v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu31ll_BFu16i_BFu16ll) C1{ FL:31 Fi:16 FL:16}



static void Test_BFu31ll_BFu16i_BFu16ll()
{
  {
    init_simple_test("BFu31ll_BFu16i_BFu16ll");
    static STRUCT_IF_C BFu31ll_BFu16i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31ll_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_BFu16ll, BFu31ll_BFu16i_BFu16ll)
//============================================================================


struct  BFu31ll_BFu16i_BFu16s  {
  __tsu64 v1:31;
  unsigned int v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu31ll_BFu16i_BFu16s) C1{ FL:31 Fi:16 Fs:16}



static void Test_BFu31ll_BFu16i_BFu16s()
{
  {
    init_simple_test("BFu31ll_BFu16i_BFu16s");
    static STRUCT_IF_C BFu31ll_BFu16i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31ll_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_BFu16s, BFu31ll_BFu16i_BFu16s)
//============================================================================


struct  BFu31ll_BFu16i_BFu17i  {
  __tsu64 v1:31;
  unsigned int v2:16;
  unsigned int v3:17;
};
//SIG(1 BFu31ll_BFu16i_BFu17i) C1{ FL:31 Fi:16 Fi:17}



static void Test_BFu31ll_BFu16i_BFu17i()
{
  {
    init_simple_test("BFu31ll_BFu16i_BFu17i");
    static STRUCT_IF_C BFu31ll_BFu16i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31ll_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu16i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_BFu17i, BFu31ll_BFu16i_BFu17i)
//============================================================================


struct  BFu31ll_BFu16i_BFu17ll  {
  __tsu64 v1:31;
  unsigned int v2:16;
  __tsu64 v3:17;
};
//SIG(1 BFu31ll_BFu16i_BFu17ll) C1{ FL:31 Fi:16 FL:17}



static void Test_BFu31ll_BFu16i_BFu17ll()
{
  {
    init_simple_test("BFu31ll_BFu16i_BFu17ll");
    static STRUCT_IF_C BFu31ll_BFu16i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, 1, "BFu31ll_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu16i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_BFu17ll, BFu31ll_BFu16i_BFu17ll)
//============================================================================


struct  BFu31ll_BFu16i_BFu1c  {
  __tsu64 v1:31;
  unsigned int v2:16;
  unsigned char v3:1;
};
//SIG(1 BFu31ll_BFu16i_BFu1c) C1{ FL:31 Fi:16 Fc:1}



static void Test_BFu31ll_BFu16i_BFu1c()
{
  {
    init_simple_test("BFu31ll_BFu16i_BFu1c");
    static STRUCT_IF_C BFu31ll_BFu16i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu1c");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31ll_BFu16i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_BFu1c, BFu31ll_BFu16i_BFu1c)
//============================================================================


struct  BFu31ll_BFu16i_BFu1i  {
  __tsu64 v1:31;
  unsigned int v2:16;
  unsigned int v3:1;
};
//SIG(1 BFu31ll_BFu16i_BFu1i) C1{ FL:31 Fi:16 Fi:1}



static void Test_BFu31ll_BFu16i_BFu1i()
{
  {
    init_simple_test("BFu31ll_BFu16i_BFu1i");
    static STRUCT_IF_C BFu31ll_BFu16i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu1i");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31ll_BFu16i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_BFu1i, BFu31ll_BFu16i_BFu1i)
//============================================================================


struct  BFu31ll_BFu16i_BFu1ll  {
  __tsu64 v1:31;
  unsigned int v2:16;
  __tsu64 v3:1;
};
//SIG(1 BFu31ll_BFu16i_BFu1ll) C1{ FL:31 Fi:16 FL:1}



static void Test_BFu31ll_BFu16i_BFu1ll()
{
  {
    init_simple_test("BFu31ll_BFu16i_BFu1ll");
    static STRUCT_IF_C BFu31ll_BFu16i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu1ll");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31ll_BFu16i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_BFu1ll, BFu31ll_BFu16i_BFu1ll)
//============================================================================


struct  BFu31ll_BFu16i_BFu1s  {
  __tsu64 v1:31;
  unsigned int v2:16;
  unsigned short v3:1;
};
//SIG(1 BFu31ll_BFu16i_BFu1s) C1{ FL:31 Fi:16 Fs:1}



static void Test_BFu31ll_BFu16i_BFu1s()
{
  {
    init_simple_test("BFu31ll_BFu16i_BFu1s");
    static STRUCT_IF_C BFu31ll_BFu16i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu1s");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31ll_BFu16i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_BFu1s, BFu31ll_BFu16i_BFu1s)
//============================================================================


struct  BFu31ll_BFu16i_BFu31i  {
  __tsu64 v1:31;
  unsigned int v2:16;
  unsigned int v3:31;
};
//SIG(1 BFu31ll_BFu16i_BFu31i) C1{ FL:31 Fi:16 Fi:31}



static void Test_BFu31ll_BFu16i_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFu16i_BFu31i");
    static STRUCT_IF_C BFu31ll_BFu16i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_BFu31i, BFu31ll_BFu16i_BFu31i)
//============================================================================


struct  BFu31ll_BFu16i_BFu31ll  {
  __tsu64 v1:31;
  unsigned int v2:16;
  __tsu64 v3:31;
};
//SIG(1 BFu31ll_BFu16i_BFu31ll) C1{ FL:31 Fi:16 FL:31}



static void Test_BFu31ll_BFu16i_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFu16i_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFu16i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, 1, "BFu31ll_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_BFu31ll, BFu31ll_BFu16i_BFu31ll)
//============================================================================


struct  BFu31ll_BFu16i_BFu32i  {
  __tsu64 v1:31;
  unsigned int v2:16;
  unsigned int v3:32;
};
//SIG(1 BFu31ll_BFu16i_BFu32i) C1{ FL:31 Fi:16 Fi:32}



static void Test_BFu31ll_BFu16i_BFu32i()
{
  {
    init_simple_test("BFu31ll_BFu16i_BFu32i");
    static STRUCT_IF_C BFu31ll_BFu16i_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31ll_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu16i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_BFu32i, BFu31ll_BFu16i_BFu32i)
//============================================================================


struct  BFu31ll_BFu16i_BFu32ll  {
  __tsu64 v1:31;
  unsigned int v2:16;
  __tsu64 v3:32;
};
//SIG(1 BFu31ll_BFu16i_BFu32ll) C1{ FL:31 Fi:16 FL:32}



static void Test_BFu31ll_BFu16i_BFu32ll()
{
  {
    init_simple_test("BFu31ll_BFu16i_BFu32ll");
    static STRUCT_IF_C BFu31ll_BFu16i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, 1, "BFu31ll_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu16i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_BFu32ll, BFu31ll_BFu16i_BFu32ll)
//============================================================================


struct  BFu31ll_BFu16i_BFu33  {
  __tsu64 v1:31;
  unsigned int v2:16;
  __tsu64 v3:33;
};
//SIG(1 BFu31ll_BFu16i_BFu33) C1{ FL:31 Fi:16 FL:33}



static void Test_BFu31ll_BFu16i_BFu33()
{
  {
    init_simple_test("BFu31ll_BFu16i_BFu33");
    static STRUCT_IF_C BFu31ll_BFu16i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, 1, "BFu31ll_BFu16i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, hide_ull(1LL<<32), "BFu31ll_BFu16i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_BFu33, BFu31ll_BFu16i_BFu33)
//============================================================================


struct  BFu31ll_BFu16i_BFu7c  {
  __tsu64 v1:31;
  unsigned int v2:16;
  unsigned char v3:7;
};
//SIG(1 BFu31ll_BFu16i_BFu7c) C1{ FL:31 Fi:16 Fc:7}



static void Test_BFu31ll_BFu16i_BFu7c()
{
  {
    init_simple_test("BFu31ll_BFu16i_BFu7c");
    static STRUCT_IF_C BFu31ll_BFu16i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31ll_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu16i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_BFu7c, BFu31ll_BFu16i_BFu7c)
//============================================================================


struct  BFu31ll_BFu16i_BFu7i  {
  __tsu64 v1:31;
  unsigned int v2:16;
  unsigned int v3:7;
};
//SIG(1 BFu31ll_BFu16i_BFu7i) C1{ FL:31 Fi:16 Fi:7}



static void Test_BFu31ll_BFu16i_BFu7i()
{
  {
    init_simple_test("BFu31ll_BFu16i_BFu7i");
    static STRUCT_IF_C BFu31ll_BFu16i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31ll_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu16i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_BFu7i, BFu31ll_BFu16i_BFu7i)
//============================================================================


struct  BFu31ll_BFu16i_BFu7ll  {
  __tsu64 v1:31;
  unsigned int v2:16;
  __tsu64 v3:7;
};
//SIG(1 BFu31ll_BFu16i_BFu7ll) C1{ FL:31 Fi:16 FL:7}



static void Test_BFu31ll_BFu16i_BFu7ll()
{
  {
    init_simple_test("BFu31ll_BFu16i_BFu7ll");
    static STRUCT_IF_C BFu31ll_BFu16i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31ll_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu16i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_BFu7ll, BFu31ll_BFu16i_BFu7ll)
//============================================================================


struct  BFu31ll_BFu16i_BFu7s  {
  __tsu64 v1:31;
  unsigned int v2:16;
  unsigned short v3:7;
};
//SIG(1 BFu31ll_BFu16i_BFu7s) C1{ FL:31 Fi:16 Fs:7}



static void Test_BFu31ll_BFu16i_BFu7s()
{
  {
    init_simple_test("BFu31ll_BFu16i_BFu7s");
    static STRUCT_IF_C BFu31ll_BFu16i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31ll_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu16i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_BFu7s, BFu31ll_BFu16i_BFu7s)
//============================================================================


struct  BFu31ll_BFu16i_BFu8c  {
  __tsu64 v1:31;
  unsigned int v2:16;
  unsigned char v3:8;
};
//SIG(1 BFu31ll_BFu16i_BFu8c) C1{ FL:31 Fi:16 Fc:8}



static void Test_BFu31ll_BFu16i_BFu8c()
{
  {
    init_simple_test("BFu31ll_BFu16i_BFu8c");
    static STRUCT_IF_C BFu31ll_BFu16i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31ll_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu16i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_BFu8c, BFu31ll_BFu16i_BFu8c)
//============================================================================


struct  BFu31ll_BFu16i_BFu8i  {
  __tsu64 v1:31;
  unsigned int v2:16;
  unsigned int v3:8;
};
//SIG(1 BFu31ll_BFu16i_BFu8i) C1{ FL:31 Fi:16 Fi:8}



static void Test_BFu31ll_BFu16i_BFu8i()
{
  {
    init_simple_test("BFu31ll_BFu16i_BFu8i");
    static STRUCT_IF_C BFu31ll_BFu16i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31ll_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu16i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_BFu8i, BFu31ll_BFu16i_BFu8i)
//============================================================================


struct  BFu31ll_BFu16i_BFu8ll  {
  __tsu64 v1:31;
  unsigned int v2:16;
  __tsu64 v3:8;
};
//SIG(1 BFu31ll_BFu16i_BFu8ll) C1{ FL:31 Fi:16 FL:8}



static void Test_BFu31ll_BFu16i_BFu8ll()
{
  {
    init_simple_test("BFu31ll_BFu16i_BFu8ll");
    static STRUCT_IF_C BFu31ll_BFu16i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31ll_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu16i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_BFu8ll, BFu31ll_BFu16i_BFu8ll)
//============================================================================


struct  BFu31ll_BFu16i_BFu8s  {
  __tsu64 v1:31;
  unsigned int v2:16;
  unsigned short v3:8;
};
//SIG(1 BFu31ll_BFu16i_BFu8s) C1{ FL:31 Fi:16 Fs:8}



static void Test_BFu31ll_BFu16i_BFu8s()
{
  {
    init_simple_test("BFu31ll_BFu16i_BFu8s");
    static STRUCT_IF_C BFu31ll_BFu16i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31ll_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu16i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_BFu8s, BFu31ll_BFu16i_BFu8s)
//============================================================================


struct  BFu31ll_BFu16i_BFu9i  {
  __tsu64 v1:31;
  unsigned int v2:16;
  unsigned int v3:9;
};
//SIG(1 BFu31ll_BFu16i_BFu9i) C1{ FL:31 Fi:16 Fi:9}



static void Test_BFu31ll_BFu16i_BFu9i()
{
  {
    init_simple_test("BFu31ll_BFu16i_BFu9i");
    static STRUCT_IF_C BFu31ll_BFu16i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31ll_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu16i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_BFu9i, BFu31ll_BFu16i_BFu9i)
//============================================================================


struct  BFu31ll_BFu16i_BFu9ll  {
  __tsu64 v1:31;
  unsigned int v2:16;
  __tsu64 v3:9;
};
//SIG(1 BFu31ll_BFu16i_BFu9ll) C1{ FL:31 Fi:16 FL:9}



static void Test_BFu31ll_BFu16i_BFu9ll()
{
  {
    init_simple_test("BFu31ll_BFu16i_BFu9ll");
    static STRUCT_IF_C BFu31ll_BFu16i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31ll_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu16i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_BFu9ll, BFu31ll_BFu16i_BFu9ll)
//============================================================================


struct  BFu31ll_BFu16i_BFu9s  {
  __tsu64 v1:31;
  unsigned int v2:16;
  unsigned short v3:9;
};
//SIG(1 BFu31ll_BFu16i_BFu9s) C1{ FL:31 Fi:16 Fs:9}



static void Test_BFu31ll_BFu16i_BFu9s()
{
  {
    init_simple_test("BFu31ll_BFu16i_BFu9s");
    static STRUCT_IF_C BFu31ll_BFu16i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31ll_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu16i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_BFu9s, BFu31ll_BFu16i_BFu9s)
//============================================================================


struct  BFu31ll_BFu16i_C  {
  __tsu64 v1:31;
  unsigned int v2:16;
  char v3;
};
//SIG(1 BFu31ll_BFu16i_C) C1{ FL:31 Fi:16 Fc}



static void Test_BFu31ll_BFu16i_C()
{
  {
    init_simple_test("BFu31ll_BFu16i_C");
    static STRUCT_IF_C BFu31ll_BFu16i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_C");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_C");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_C");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu16i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_C, BFu31ll_BFu16i_C)
//============================================================================


struct  BFu31ll_BFu16i_D  {
  __tsu64 v1:31;
  unsigned int v2:16;
  double v3;
};
//SIG(1 BFu31ll_BFu16i_D) C1{ FL:31 Fi:16 FL}



static void Test_BFu31ll_BFu16i_D()
{
  {
    init_simple_test("BFu31ll_BFu16i_D");
    static STRUCT_IF_C BFu31ll_BFu16i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu16i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_D");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_D");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_D");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu16i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_D, BFu31ll_BFu16i_D)
//============================================================================


struct  BFu31ll_BFu16i_F  {
  __tsu64 v1:31;
  unsigned int v2:16;
  float v3;
};
//SIG(1 BFu31ll_BFu16i_F) C1{ FL:31 Fi:16 Fi}



static void Test_BFu31ll_BFu16i_F()
{
  {
    init_simple_test("BFu31ll_BFu16i_F");
    static STRUCT_IF_C BFu31ll_BFu16i_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_F");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_F");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_F");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu16i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_F, BFu31ll_BFu16i_F)
//============================================================================


struct  BFu31ll_BFu16i_I  {
  __tsu64 v1:31;
  unsigned int v2:16;
  int v3;
};
//SIG(1 BFu31ll_BFu16i_I) C1{ FL:31 Fi:16 Fi}



static void Test_BFu31ll_BFu16i_I()
{
  {
    init_simple_test("BFu31ll_BFu16i_I");
    static STRUCT_IF_C BFu31ll_BFu16i_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_I");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_I");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_I");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu16i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_I, BFu31ll_BFu16i_I)
//============================================================================


struct  BFu31ll_BFu16i_Ip  {
  __tsu64 v1:31;
  unsigned int v2:16;
  int *v3;
};
//SIG(1 BFu31ll_BFu16i_Ip) C1{ FL:31 Fi:16 Fp}



static void Test_BFu31ll_BFu16i_Ip()
{
  {
    init_simple_test("BFu31ll_BFu16i_Ip");
    static STRUCT_IF_C BFu31ll_BFu16i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_Ip");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu16i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_Ip, BFu31ll_BFu16i_Ip)
//============================================================================


struct  BFu31ll_BFu16i_L  {
  __tsu64 v1:31;
  unsigned int v2:16;
  __tsi64 v3;
};
//SIG(1 BFu31ll_BFu16i_L) C1{ FL:31 Fi:16 FL}



static void Test_BFu31ll_BFu16i_L()
{
  {
    init_simple_test("BFu31ll_BFu16i_L");
    static STRUCT_IF_C BFu31ll_BFu16i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu16i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_L");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_L");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_L");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu16i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_L, BFu31ll_BFu16i_L)
//============================================================================


struct  BFu31ll_BFu16i_S  {
  __tsu64 v1:31;
  unsigned int v2:16;
  short v3;
};
//SIG(1 BFu31ll_BFu16i_S) C1{ FL:31 Fi:16 Fs}



static void Test_BFu31ll_BFu16i_S()
{
  {
    init_simple_test("BFu31ll_BFu16i_S");
    static STRUCT_IF_C BFu31ll_BFu16i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_S");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_S");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_S");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu16i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_S, BFu31ll_BFu16i_S)
//============================================================================


struct  BFu31ll_BFu16i_Uc  {
  __tsu64 v1:31;
  unsigned int v2:16;
  unsigned char v3;
};
//SIG(1 BFu31ll_BFu16i_Uc) C1{ FL:31 Fi:16 Fc}



static void Test_BFu31ll_BFu16i_Uc()
{
  {
    init_simple_test("BFu31ll_BFu16i_Uc");
    static STRUCT_IF_C BFu31ll_BFu16i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_Uc");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu16i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_Uc, BFu31ll_BFu16i_Uc)
//============================================================================


struct  BFu31ll_BFu16i_Ui  {
  __tsu64 v1:31;
  unsigned int v2:16;
  unsigned int v3;
};
//SIG(1 BFu31ll_BFu16i_Ui) C1{ FL:31 Fi:16 Fi}



static void Test_BFu31ll_BFu16i_Ui()
{
  {
    init_simple_test("BFu31ll_BFu16i_Ui");
    static STRUCT_IF_C BFu31ll_BFu16i_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_Ui");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu16i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_Ui, BFu31ll_BFu16i_Ui)
//============================================================================


struct  BFu31ll_BFu16i_Ul  {
  __tsu64 v1:31;
  unsigned int v2:16;
  __tsu64 v3;
};
//SIG(1 BFu31ll_BFu16i_Ul) C1{ FL:31 Fi:16 FL}



static void Test_BFu31ll_BFu16i_Ul()
{
  {
    init_simple_test("BFu31ll_BFu16i_Ul");
    static STRUCT_IF_C BFu31ll_BFu16i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu16i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_Ul");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu16i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_Ul, BFu31ll_BFu16i_Ul)
//============================================================================


struct  BFu31ll_BFu16i_Us  {
  __tsu64 v1:31;
  unsigned int v2:16;
  unsigned short v3;
};
//SIG(1 BFu31ll_BFu16i_Us) C1{ FL:31 Fi:16 Fs}



static void Test_BFu31ll_BFu16i_Us()
{
  {
    init_simple_test("BFu31ll_BFu16i_Us");
    static STRUCT_IF_C BFu31ll_BFu16i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_Us");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_Us");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_Us");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu16i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_Us, BFu31ll_BFu16i_Us)
//============================================================================


struct  BFu31ll_BFu16i_Vp  {
  __tsu64 v1:31;
  unsigned int v2:16;
  void *v3;
};
//SIG(1 BFu31ll_BFu16i_Vp) C1{ FL:31 Fi:16 Fp}



static void Test_BFu31ll_BFu16i_Vp()
{
  {
    init_simple_test("BFu31ll_BFu16i_Vp");
    static STRUCT_IF_C BFu31ll_BFu16i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_Vp");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu16i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16i_Vp, BFu31ll_BFu16i_Vp)
//============================================================================


struct  BFu31ll_BFu16ll  {
  __tsu64 v1:31;
  __tsu64 v2:16;
};
//SIG(1 BFu31ll_BFu16ll) C1{ FL:31 FL:16}



static void Test_BFu31ll_BFu16ll()
{
  {
    init_simple_test("BFu31ll_BFu16ll");
    static STRUCT_IF_C BFu31ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll, BFu31ll_BFu16ll)
//============================================================================


struct  BFu31ll_BFu16ll_BFu15i  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  unsigned int v3:15;
};
//SIG(1 BFu31ll_BFu16ll_BFu15i) C1{ FL:31 FL:16 Fi:15}



static void Test_BFu31ll_BFu16ll_BFu15i()
{
  {
    init_simple_test("BFu31ll_BFu16ll_BFu15i");
    static STRUCT_IF_C BFu31ll_BFu16ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 5, 7, 15, 1, "BFu31ll_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 5, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu16ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_BFu15i, BFu31ll_BFu16ll_BFu15i)
//============================================================================


struct  BFu31ll_BFu16ll_BFu15ll  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  __tsu64 v3:15;
};
//SIG(1 BFu31ll_BFu16ll_BFu15ll) C1{ FL:31 FL:16 FL:15}



static void Test_BFu31ll_BFu16ll_BFu15ll()
{
  {
    init_simple_test("BFu31ll_BFu16ll_BFu15ll");
    static STRUCT_IF_C BFu31ll_BFu16ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 5, 7, 15, 1, "BFu31ll_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 5, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu16ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_BFu15ll, BFu31ll_BFu16ll_BFu15ll)
//============================================================================


struct  BFu31ll_BFu16ll_BFu15s  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  unsigned short v3:15;
};
//SIG(1 BFu31ll_BFu16ll_BFu15s) C1{ FL:31 FL:16 Fs:15}



static void Test_BFu31ll_BFu16ll_BFu15s()
{
  {
    init_simple_test("BFu31ll_BFu16ll_BFu15s");
    static STRUCT_IF_C BFu31ll_BFu16ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31ll_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu16ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_BFu15s, BFu31ll_BFu16ll_BFu15s)
//============================================================================


struct  BFu31ll_BFu16ll_BFu16i  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu31ll_BFu16ll_BFu16i) C1{ FL:31 FL:16 Fi:16}



static void Test_BFu31ll_BFu16ll_BFu16i()
{
  {
    init_simple_test("BFu31ll_BFu16ll_BFu16i");
    static STRUCT_IF_C BFu31ll_BFu16ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 5, 7, 16, 1, "BFu31ll_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 5, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_BFu16i, BFu31ll_BFu16ll_BFu16i)
//============================================================================


struct  BFu31ll_BFu16ll_BFu16ll  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu31ll_BFu16ll_BFu16ll) C1{ FL:31 FL:16 FL:16}



static void Test_BFu31ll_BFu16ll_BFu16ll()
{
  {
    init_simple_test("BFu31ll_BFu16ll_BFu16ll");
    static STRUCT_IF_C BFu31ll_BFu16ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 5, 7, 16, 1, "BFu31ll_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 5, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_BFu16ll, BFu31ll_BFu16ll_BFu16ll)
//============================================================================


struct  BFu31ll_BFu16ll_BFu16s  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu31ll_BFu16ll_BFu16s) C1{ FL:31 FL:16 Fs:16}



static void Test_BFu31ll_BFu16ll_BFu16s()
{
  {
    init_simple_test("BFu31ll_BFu16ll_BFu16s");
    static STRUCT_IF_C BFu31ll_BFu16ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31ll_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_BFu16s, BFu31ll_BFu16ll_BFu16s)
//============================================================================


struct  BFu31ll_BFu16ll_BFu17i  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  unsigned int v3:17;
};
//SIG(1 BFu31ll_BFu16ll_BFu17i) C1{ FL:31 FL:16 Fi:17}



static void Test_BFu31ll_BFu16ll_BFu17i()
{
  {
    init_simple_test("BFu31ll_BFu16ll_BFu17i");
    static STRUCT_IF_C BFu31ll_BFu16ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 5, 7, 17, 1, "BFu31ll_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 5, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu16ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_BFu17i, BFu31ll_BFu16ll_BFu17i)
//============================================================================


struct  BFu31ll_BFu16ll_BFu17ll  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  __tsu64 v3:17;
};
//SIG(1 BFu31ll_BFu16ll_BFu17ll) C1{ FL:31 FL:16 FL:17}



static void Test_BFu31ll_BFu16ll_BFu17ll()
{
  {
    init_simple_test("BFu31ll_BFu16ll_BFu17ll");
    static STRUCT_IF_C BFu31ll_BFu16ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 5, 7, 17, 1, "BFu31ll_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 5, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu16ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_BFu17ll, BFu31ll_BFu16ll_BFu17ll)
//============================================================================


struct  BFu31ll_BFu16ll_BFu1c  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  unsigned char v3:1;
};
//SIG(1 BFu31ll_BFu16ll_BFu1c) C1{ FL:31 FL:16 Fc:1}



static void Test_BFu31ll_BFu16ll_BFu1c()
{
  {
    init_simple_test("BFu31ll_BFu16ll_BFu1c");
    static STRUCT_IF_C BFu31ll_BFu16ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu1c");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu31ll_BFu16ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_BFu1c, BFu31ll_BFu16ll_BFu1c)
//============================================================================


struct  BFu31ll_BFu16ll_BFu1i  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  unsigned int v3:1;
};
//SIG(1 BFu31ll_BFu16ll_BFu1i) C1{ FL:31 FL:16 Fi:1}



static void Test_BFu31ll_BFu16ll_BFu1i()
{
  {
    init_simple_test("BFu31ll_BFu16ll_BFu1i");
    static STRUCT_IF_C BFu31ll_BFu16ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu1i");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu31ll_BFu16ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_BFu1i, BFu31ll_BFu16ll_BFu1i)
//============================================================================


struct  BFu31ll_BFu16ll_BFu1ll  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  __tsu64 v3:1;
};
//SIG(1 BFu31ll_BFu16ll_BFu1ll) C1{ FL:31 FL:16 FL:1}



static void Test_BFu31ll_BFu16ll_BFu1ll()
{
  {
    init_simple_test("BFu31ll_BFu16ll_BFu1ll");
    static STRUCT_IF_C BFu31ll_BFu16ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu31ll_BFu16ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_BFu1ll, BFu31ll_BFu16ll_BFu1ll)
//============================================================================


struct  BFu31ll_BFu16ll_BFu1s  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  unsigned short v3:1;
};
//SIG(1 BFu31ll_BFu16ll_BFu1s) C1{ FL:31 FL:16 Fs:1}



static void Test_BFu31ll_BFu16ll_BFu1s()
{
  {
    init_simple_test("BFu31ll_BFu16ll_BFu1s");
    static STRUCT_IF_C BFu31ll_BFu16ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu1s");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu31ll_BFu16ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_BFu1s, BFu31ll_BFu16ll_BFu1s)
//============================================================================


struct  BFu31ll_BFu16ll_BFu31i  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  unsigned int v3:31;
};
//SIG(1 BFu31ll_BFu16ll_BFu31i) C1{ FL:31 FL:16 Fi:31}



static void Test_BFu31ll_BFu16ll_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFu16ll_BFu31i");
    static STRUCT_IF_C BFu31ll_BFu16ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_BFu31i, BFu31ll_BFu16ll_BFu31i)
//============================================================================


struct  BFu31ll_BFu16ll_BFu31ll  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  __tsu64 v3:31;
};
//SIG(1 BFu31ll_BFu16ll_BFu31ll) C1{ FL:31 FL:16 FL:31}



static void Test_BFu31ll_BFu16ll_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFu16ll_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFu16ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 31, 1, "BFu31ll_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_BFu31ll, BFu31ll_BFu16ll_BFu31ll)
//============================================================================


struct  BFu31ll_BFu16ll_BFu32i  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  unsigned int v3:32;
};
//SIG(1 BFu31ll_BFu16ll_BFu32i) C1{ FL:31 FL:16 Fi:32}



static void Test_BFu31ll_BFu16ll_BFu32i()
{
  {
    init_simple_test("BFu31ll_BFu16ll_BFu32i");
    static STRUCT_IF_C BFu31ll_BFu16ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31ll_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu16ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_BFu32i, BFu31ll_BFu16ll_BFu32i)
//============================================================================


struct  BFu31ll_BFu16ll_BFu32ll  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  __tsu64 v3:32;
};
//SIG(1 BFu31ll_BFu16ll_BFu32ll) C1{ FL:31 FL:16 FL:32}



static void Test_BFu31ll_BFu16ll_BFu32ll()
{
  {
    init_simple_test("BFu31ll_BFu16ll_BFu32ll");
    static STRUCT_IF_C BFu31ll_BFu16ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 32, 1, "BFu31ll_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu31ll_BFu16ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_BFu32ll, BFu31ll_BFu16ll_BFu32ll)
//============================================================================


struct  BFu31ll_BFu16ll_BFu33  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  __tsu64 v3:33;
};
//SIG(1 BFu31ll_BFu16ll_BFu33) C1{ FL:31 FL:16 FL:33}



static void Test_BFu31ll_BFu16ll_BFu33()
{
  {
    init_simple_test("BFu31ll_BFu16ll_BFu33");
    static STRUCT_IF_C BFu31ll_BFu16ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 33, 1, "BFu31ll_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu31ll_BFu16ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_BFu33, BFu31ll_BFu16ll_BFu33)
//============================================================================


struct  BFu31ll_BFu16ll_BFu7c  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  unsigned char v3:7;
};
//SIG(1 BFu31ll_BFu16ll_BFu7c) C1{ FL:31 FL:16 Fc:7}



static void Test_BFu31ll_BFu16ll_BFu7c()
{
  {
    init_simple_test("BFu31ll_BFu16ll_BFu7c");
    static STRUCT_IF_C BFu31ll_BFu16ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31ll_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu16ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_BFu7c, BFu31ll_BFu16ll_BFu7c)
//============================================================================


struct  BFu31ll_BFu16ll_BFu7i  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  unsigned int v3:7;
};
//SIG(1 BFu31ll_BFu16ll_BFu7i) C1{ FL:31 FL:16 Fi:7}



static void Test_BFu31ll_BFu16ll_BFu7i()
{
  {
    init_simple_test("BFu31ll_BFu16ll_BFu7i");
    static STRUCT_IF_C BFu31ll_BFu16ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 5, 7, 7, 1, "BFu31ll_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 5, 7, 7, hide_ull(1LL<<6), "BFu31ll_BFu16ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_BFu7i, BFu31ll_BFu16ll_BFu7i)
//============================================================================


struct  BFu31ll_BFu16ll_BFu7ll  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  __tsu64 v3:7;
};
//SIG(1 BFu31ll_BFu16ll_BFu7ll) C1{ FL:31 FL:16 FL:7}



static void Test_BFu31ll_BFu16ll_BFu7ll()
{
  {
    init_simple_test("BFu31ll_BFu16ll_BFu7ll");
    static STRUCT_IF_C BFu31ll_BFu16ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 5, 7, 7, 1, "BFu31ll_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 5, 7, 7, hide_ull(1LL<<6), "BFu31ll_BFu16ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_BFu7ll, BFu31ll_BFu16ll_BFu7ll)
//============================================================================


struct  BFu31ll_BFu16ll_BFu7s  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  unsigned short v3:7;
};
//SIG(1 BFu31ll_BFu16ll_BFu7s) C1{ FL:31 FL:16 Fs:7}



static void Test_BFu31ll_BFu16ll_BFu7s()
{
  {
    init_simple_test("BFu31ll_BFu16ll_BFu7s");
    static STRUCT_IF_C BFu31ll_BFu16ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31ll_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu16ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_BFu7s, BFu31ll_BFu16ll_BFu7s)
//============================================================================


struct  BFu31ll_BFu16ll_BFu8c  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  unsigned char v3:8;
};
//SIG(1 BFu31ll_BFu16ll_BFu8c) C1{ FL:31 FL:16 Fc:8}



static void Test_BFu31ll_BFu16ll_BFu8c()
{
  {
    init_simple_test("BFu31ll_BFu16ll_BFu8c");
    static STRUCT_IF_C BFu31ll_BFu16ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31ll_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu16ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_BFu8c, BFu31ll_BFu16ll_BFu8c)
//============================================================================


struct  BFu31ll_BFu16ll_BFu8i  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  unsigned int v3:8;
};
//SIG(1 BFu31ll_BFu16ll_BFu8i) C1{ FL:31 FL:16 Fi:8}



static void Test_BFu31ll_BFu16ll_BFu8i()
{
  {
    init_simple_test("BFu31ll_BFu16ll_BFu8i");
    static STRUCT_IF_C BFu31ll_BFu16ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 5, 7, 8, 1, "BFu31ll_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 5, 7, 8, hide_ull(1LL<<7), "BFu31ll_BFu16ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_BFu8i, BFu31ll_BFu16ll_BFu8i)
//============================================================================


struct  BFu31ll_BFu16ll_BFu8ll  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  __tsu64 v3:8;
};
//SIG(1 BFu31ll_BFu16ll_BFu8ll) C1{ FL:31 FL:16 FL:8}



static void Test_BFu31ll_BFu16ll_BFu8ll()
{
  {
    init_simple_test("BFu31ll_BFu16ll_BFu8ll");
    static STRUCT_IF_C BFu31ll_BFu16ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 5, 7, 8, 1, "BFu31ll_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 5, 7, 8, hide_ull(1LL<<7), "BFu31ll_BFu16ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_BFu8ll, BFu31ll_BFu16ll_BFu8ll)
//============================================================================


struct  BFu31ll_BFu16ll_BFu8s  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  unsigned short v3:8;
};
//SIG(1 BFu31ll_BFu16ll_BFu8s) C1{ FL:31 FL:16 Fs:8}



static void Test_BFu31ll_BFu16ll_BFu8s()
{
  {
    init_simple_test("BFu31ll_BFu16ll_BFu8s");
    static STRUCT_IF_C BFu31ll_BFu16ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31ll_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu16ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_BFu8s, BFu31ll_BFu16ll_BFu8s)
//============================================================================


struct  BFu31ll_BFu16ll_BFu9i  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  unsigned int v3:9;
};
//SIG(1 BFu31ll_BFu16ll_BFu9i) C1{ FL:31 FL:16 Fi:9}



static void Test_BFu31ll_BFu16ll_BFu9i()
{
  {
    init_simple_test("BFu31ll_BFu16ll_BFu9i");
    static STRUCT_IF_C BFu31ll_BFu16ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 5, 7, 9, 1, "BFu31ll_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 5, 7, 9, hide_ull(1LL<<8), "BFu31ll_BFu16ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_BFu9i, BFu31ll_BFu16ll_BFu9i)
//============================================================================


struct  BFu31ll_BFu16ll_BFu9ll  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  __tsu64 v3:9;
};
//SIG(1 BFu31ll_BFu16ll_BFu9ll) C1{ FL:31 FL:16 FL:9}



static void Test_BFu31ll_BFu16ll_BFu9ll()
{
  {
    init_simple_test("BFu31ll_BFu16ll_BFu9ll");
    static STRUCT_IF_C BFu31ll_BFu16ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 5, 7, 9, 1, "BFu31ll_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 5, 7, 9, hide_ull(1LL<<8), "BFu31ll_BFu16ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_BFu9ll, BFu31ll_BFu16ll_BFu9ll)
//============================================================================


struct  BFu31ll_BFu16ll_BFu9s  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  unsigned short v3:9;
};
//SIG(1 BFu31ll_BFu16ll_BFu9s) C1{ FL:31 FL:16 Fs:9}



static void Test_BFu31ll_BFu16ll_BFu9s()
{
  {
    init_simple_test("BFu31ll_BFu16ll_BFu9s");
    static STRUCT_IF_C BFu31ll_BFu16ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31ll_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu16ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_BFu9s, BFu31ll_BFu16ll_BFu9s)
//============================================================================


struct  BFu31ll_BFu16ll_C  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  char v3;
};
//SIG(1 BFu31ll_BFu16ll_C) C1{ FL:31 FL:16 Fc}



static void Test_BFu31ll_BFu16ll_C()
{
  {
    init_simple_test("BFu31ll_BFu16ll_C");
    static STRUCT_IF_C BFu31ll_BFu16ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_C");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_C");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_C");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu16ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_C, BFu31ll_BFu16ll_C)
//============================================================================


struct  BFu31ll_BFu16ll_D  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  double v3;
};
//SIG(1 BFu31ll_BFu16ll_D) C1{ FL:31 FL:16 FL}



static void Test_BFu31ll_BFu16ll_D()
{
  {
    init_simple_test("BFu31ll_BFu16ll_D");
    static STRUCT_IF_C BFu31ll_BFu16ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu16ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_D");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_D");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_D");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu16ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_D, BFu31ll_BFu16ll_D)
//============================================================================


struct  BFu31ll_BFu16ll_F  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  float v3;
};
//SIG(1 BFu31ll_BFu16ll_F) C1{ FL:31 FL:16 Fi}



static void Test_BFu31ll_BFu16ll_F()
{
  {
    init_simple_test("BFu31ll_BFu16ll_F");
    static STRUCT_IF_C BFu31ll_BFu16ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_F");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_F");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_F");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu16ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_F, BFu31ll_BFu16ll_F)
//============================================================================


struct  BFu31ll_BFu16ll_I  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  int v3;
};
//SIG(1 BFu31ll_BFu16ll_I) C1{ FL:31 FL:16 Fi}



static void Test_BFu31ll_BFu16ll_I()
{
  {
    init_simple_test("BFu31ll_BFu16ll_I");
    static STRUCT_IF_C BFu31ll_BFu16ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_I");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_I");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_I");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu16ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_I, BFu31ll_BFu16ll_I)
//============================================================================


struct  BFu31ll_BFu16ll_Ip  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  int *v3;
};
//SIG(1 BFu31ll_BFu16ll_Ip) C1{ FL:31 FL:16 Fp}



static void Test_BFu31ll_BFu16ll_Ip()
{
  {
    init_simple_test("BFu31ll_BFu16ll_Ip");
    static STRUCT_IF_C BFu31ll_BFu16ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_Ip");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_Ip");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_Ip");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu16ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_Ip, BFu31ll_BFu16ll_Ip)
//============================================================================


struct  BFu31ll_BFu16ll_L  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  __tsi64 v3;
};
//SIG(1 BFu31ll_BFu16ll_L) C1{ FL:31 FL:16 FL}



static void Test_BFu31ll_BFu16ll_L()
{
  {
    init_simple_test("BFu31ll_BFu16ll_L");
    static STRUCT_IF_C BFu31ll_BFu16ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu16ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_L");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_L");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_L");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu16ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_L, BFu31ll_BFu16ll_L)
//============================================================================


struct  BFu31ll_BFu16ll_S  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  short v3;
};
//SIG(1 BFu31ll_BFu16ll_S) C1{ FL:31 FL:16 Fs}



static void Test_BFu31ll_BFu16ll_S()
{
  {
    init_simple_test("BFu31ll_BFu16ll_S");
    static STRUCT_IF_C BFu31ll_BFu16ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_S");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_S");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_S");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu16ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_S, BFu31ll_BFu16ll_S)
//============================================================================


struct  BFu31ll_BFu16ll_Uc  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  unsigned char v3;
};
//SIG(1 BFu31ll_BFu16ll_Uc) C1{ FL:31 FL:16 Fc}



static void Test_BFu31ll_BFu16ll_Uc()
{
  {
    init_simple_test("BFu31ll_BFu16ll_Uc");
    static STRUCT_IF_C BFu31ll_BFu16ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_Uc");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_Uc");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_Uc");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu16ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_Uc, BFu31ll_BFu16ll_Uc)
//============================================================================


struct  BFu31ll_BFu16ll_Ui  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  unsigned int v3;
};
//SIG(1 BFu31ll_BFu16ll_Ui) C1{ FL:31 FL:16 Fi}



static void Test_BFu31ll_BFu16ll_Ui()
{
  {
    init_simple_test("BFu31ll_BFu16ll_Ui");
    static STRUCT_IF_C BFu31ll_BFu16ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_Ui");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_Ui");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_Ui");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu16ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_Ui, BFu31ll_BFu16ll_Ui)
//============================================================================


struct  BFu31ll_BFu16ll_Ul  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  __tsu64 v3;
};
//SIG(1 BFu31ll_BFu16ll_Ul) C1{ FL:31 FL:16 FL}



static void Test_BFu31ll_BFu16ll_Ul()
{
  {
    init_simple_test("BFu31ll_BFu16ll_Ul");
    static STRUCT_IF_C BFu31ll_BFu16ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu16ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_Ul");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_Ul");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_Ul");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu16ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_Ul, BFu31ll_BFu16ll_Ul)
//============================================================================


struct  BFu31ll_BFu16ll_Us  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  unsigned short v3;
};
//SIG(1 BFu31ll_BFu16ll_Us) C1{ FL:31 FL:16 Fs}



static void Test_BFu31ll_BFu16ll_Us()
{
  {
    init_simple_test("BFu31ll_BFu16ll_Us");
    static STRUCT_IF_C BFu31ll_BFu16ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_Us");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_Us");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_Us");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu16ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_Us, BFu31ll_BFu16ll_Us)
//============================================================================


struct  BFu31ll_BFu16ll_Vp  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  void *v3;
};
//SIG(1 BFu31ll_BFu16ll_Vp) C1{ FL:31 FL:16 Fp}



static void Test_BFu31ll_BFu16ll_Vp()
{
  {
    init_simple_test("BFu31ll_BFu16ll_Vp");
    static STRUCT_IF_C BFu31ll_BFu16ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_Vp");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_Vp");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_Vp");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu16ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16ll_Vp, BFu31ll_BFu16ll_Vp)
//============================================================================


struct  BFu31ll_BFu16s  {
  __tsu64 v1:31;
  unsigned short v2:16;
};
//SIG(1 BFu31ll_BFu16s) C1{ FL:31 Fs:16}



static void Test_BFu31ll_BFu16s()
{
  {
    init_simple_test("BFu31ll_BFu16s");
    static STRUCT_IF_C BFu31ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s, BFu31ll_BFu16s)
//============================================================================


struct  BFu31ll_BFu16s_BFu15i  {
  __tsu64 v1:31;
  unsigned short v2:16;
  unsigned int v3:15;
};
//SIG(1 BFu31ll_BFu16s_BFu15i) C1{ FL:31 Fs:16 Fi:15}



static void Test_BFu31ll_BFu16s_BFu15i()
{
  {
    init_simple_test("BFu31ll_BFu16s_BFu15i");
    static STRUCT_IF_C BFu31ll_BFu16s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31ll_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu16s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_BFu15i, BFu31ll_BFu16s_BFu15i)
//============================================================================


struct  BFu31ll_BFu16s_BFu15ll  {
  __tsu64 v1:31;
  unsigned short v2:16;
  __tsu64 v3:15;
};
//SIG(1 BFu31ll_BFu16s_BFu15ll) C1{ FL:31 Fs:16 FL:15}



static void Test_BFu31ll_BFu16s_BFu15ll()
{
  {
    init_simple_test("BFu31ll_BFu16s_BFu15ll");
    static STRUCT_IF_C BFu31ll_BFu16s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31ll_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu16s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_BFu15ll, BFu31ll_BFu16s_BFu15ll)
//============================================================================


struct  BFu31ll_BFu16s_BFu15s  {
  __tsu64 v1:31;
  unsigned short v2:16;
  unsigned short v3:15;
};
//SIG(1 BFu31ll_BFu16s_BFu15s) C1{ FL:31 Fs:16 Fs:15}



static void Test_BFu31ll_BFu16s_BFu15s()
{
  {
    init_simple_test("BFu31ll_BFu16s_BFu15s");
    static STRUCT_IF_C BFu31ll_BFu16s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31ll_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu16s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_BFu15s, BFu31ll_BFu16s_BFu15s)
//============================================================================


struct  BFu31ll_BFu16s_BFu16i  {
  __tsu64 v1:31;
  unsigned short v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu31ll_BFu16s_BFu16i) C1{ FL:31 Fs:16 Fi:16}



static void Test_BFu31ll_BFu16s_BFu16i()
{
  {
    init_simple_test("BFu31ll_BFu16s_BFu16i");
    static STRUCT_IF_C BFu31ll_BFu16s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31ll_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_BFu16i, BFu31ll_BFu16s_BFu16i)
//============================================================================


struct  BFu31ll_BFu16s_BFu16ll  {
  __tsu64 v1:31;
  unsigned short v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu31ll_BFu16s_BFu16ll) C1{ FL:31 Fs:16 FL:16}



static void Test_BFu31ll_BFu16s_BFu16ll()
{
  {
    init_simple_test("BFu31ll_BFu16s_BFu16ll");
    static STRUCT_IF_C BFu31ll_BFu16s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31ll_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_BFu16ll, BFu31ll_BFu16s_BFu16ll)
//============================================================================


struct  BFu31ll_BFu16s_BFu16s  {
  __tsu64 v1:31;
  unsigned short v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu31ll_BFu16s_BFu16s) C1{ FL:31 Fs:16 Fs:16}



static void Test_BFu31ll_BFu16s_BFu16s()
{
  {
    init_simple_test("BFu31ll_BFu16s_BFu16s");
    static STRUCT_IF_C BFu31ll_BFu16s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31ll_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_BFu16s, BFu31ll_BFu16s_BFu16s)
//============================================================================


struct  BFu31ll_BFu16s_BFu17i  {
  __tsu64 v1:31;
  unsigned short v2:16;
  unsigned int v3:17;
};
//SIG(1 BFu31ll_BFu16s_BFu17i) C1{ FL:31 Fs:16 Fi:17}



static void Test_BFu31ll_BFu16s_BFu17i()
{
  {
    init_simple_test("BFu31ll_BFu16s_BFu17i");
    static STRUCT_IF_C BFu31ll_BFu16s_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31ll_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu16s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_BFu17i, BFu31ll_BFu16s_BFu17i)
//============================================================================


struct  BFu31ll_BFu16s_BFu17ll  {
  __tsu64 v1:31;
  unsigned short v2:16;
  __tsu64 v3:17;
};
//SIG(1 BFu31ll_BFu16s_BFu17ll) C1{ FL:31 Fs:16 FL:17}



static void Test_BFu31ll_BFu16s_BFu17ll()
{
  {
    init_simple_test("BFu31ll_BFu16s_BFu17ll");
    static STRUCT_IF_C BFu31ll_BFu16s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, 1, "BFu31ll_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu16s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_BFu17ll, BFu31ll_BFu16s_BFu17ll)
//============================================================================


struct  BFu31ll_BFu16s_BFu1c  {
  __tsu64 v1:31;
  unsigned short v2:16;
  unsigned char v3:1;
};
//SIG(1 BFu31ll_BFu16s_BFu1c) C1{ FL:31 Fs:16 Fc:1}



static void Test_BFu31ll_BFu16s_BFu1c()
{
  {
    init_simple_test("BFu31ll_BFu16s_BFu1c");
    static STRUCT_IF_C BFu31ll_BFu16s_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu1c");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31ll_BFu16s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_BFu1c, BFu31ll_BFu16s_BFu1c)
//============================================================================


struct  BFu31ll_BFu16s_BFu1i  {
  __tsu64 v1:31;
  unsigned short v2:16;
  unsigned int v3:1;
};
//SIG(1 BFu31ll_BFu16s_BFu1i) C1{ FL:31 Fs:16 Fi:1}



static void Test_BFu31ll_BFu16s_BFu1i()
{
  {
    init_simple_test("BFu31ll_BFu16s_BFu1i");
    static STRUCT_IF_C BFu31ll_BFu16s_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu1i");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31ll_BFu16s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_BFu1i, BFu31ll_BFu16s_BFu1i)
//============================================================================


struct  BFu31ll_BFu16s_BFu1ll  {
  __tsu64 v1:31;
  unsigned short v2:16;
  __tsu64 v3:1;
};
//SIG(1 BFu31ll_BFu16s_BFu1ll) C1{ FL:31 Fs:16 FL:1}



static void Test_BFu31ll_BFu16s_BFu1ll()
{
  {
    init_simple_test("BFu31ll_BFu16s_BFu1ll");
    static STRUCT_IF_C BFu31ll_BFu16s_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu1ll");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31ll_BFu16s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_BFu1ll, BFu31ll_BFu16s_BFu1ll)
//============================================================================


struct  BFu31ll_BFu16s_BFu1s  {
  __tsu64 v1:31;
  unsigned short v2:16;
  unsigned short v3:1;
};
//SIG(1 BFu31ll_BFu16s_BFu1s) C1{ FL:31 Fs:16 Fs:1}



static void Test_BFu31ll_BFu16s_BFu1s()
{
  {
    init_simple_test("BFu31ll_BFu16s_BFu1s");
    static STRUCT_IF_C BFu31ll_BFu16s_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu1s");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31ll_BFu16s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_BFu1s, BFu31ll_BFu16s_BFu1s)
//============================================================================


struct  BFu31ll_BFu16s_BFu31i  {
  __tsu64 v1:31;
  unsigned short v2:16;
  unsigned int v3:31;
};
//SIG(1 BFu31ll_BFu16s_BFu31i) C1{ FL:31 Fs:16 Fi:31}



static void Test_BFu31ll_BFu16s_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFu16s_BFu31i");
    static STRUCT_IF_C BFu31ll_BFu16s_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_BFu31i, BFu31ll_BFu16s_BFu31i)
//============================================================================


struct  BFu31ll_BFu16s_BFu31ll  {
  __tsu64 v1:31;
  unsigned short v2:16;
  __tsu64 v3:31;
};
//SIG(1 BFu31ll_BFu16s_BFu31ll) C1{ FL:31 Fs:16 FL:31}



static void Test_BFu31ll_BFu16s_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFu16s_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFu16s_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, 1, "BFu31ll_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_BFu31ll, BFu31ll_BFu16s_BFu31ll)
//============================================================================


struct  BFu31ll_BFu16s_BFu32i  {
  __tsu64 v1:31;
  unsigned short v2:16;
  unsigned int v3:32;
};
//SIG(1 BFu31ll_BFu16s_BFu32i) C1{ FL:31 Fs:16 Fi:32}



static void Test_BFu31ll_BFu16s_BFu32i()
{
  {
    init_simple_test("BFu31ll_BFu16s_BFu32i");
    static STRUCT_IF_C BFu31ll_BFu16s_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31ll_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu16s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_BFu32i, BFu31ll_BFu16s_BFu32i)
//============================================================================


struct  BFu31ll_BFu16s_BFu32ll  {
  __tsu64 v1:31;
  unsigned short v2:16;
  __tsu64 v3:32;
};
//SIG(1 BFu31ll_BFu16s_BFu32ll) C1{ FL:31 Fs:16 FL:32}



static void Test_BFu31ll_BFu16s_BFu32ll()
{
  {
    init_simple_test("BFu31ll_BFu16s_BFu32ll");
    static STRUCT_IF_C BFu31ll_BFu16s_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, 1, "BFu31ll_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu16s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_BFu32ll, BFu31ll_BFu16s_BFu32ll)
//============================================================================


struct  BFu31ll_BFu16s_BFu33  {
  __tsu64 v1:31;
  unsigned short v2:16;
  __tsu64 v3:33;
};
//SIG(1 BFu31ll_BFu16s_BFu33) C1{ FL:31 Fs:16 FL:33}



static void Test_BFu31ll_BFu16s_BFu33()
{
  {
    init_simple_test("BFu31ll_BFu16s_BFu33");
    static STRUCT_IF_C BFu31ll_BFu16s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, 1, "BFu31ll_BFu16s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, hide_ull(1LL<<32), "BFu31ll_BFu16s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_BFu33, BFu31ll_BFu16s_BFu33)
//============================================================================


struct  BFu31ll_BFu16s_BFu7c  {
  __tsu64 v1:31;
  unsigned short v2:16;
  unsigned char v3:7;
};
//SIG(1 BFu31ll_BFu16s_BFu7c) C1{ FL:31 Fs:16 Fc:7}



static void Test_BFu31ll_BFu16s_BFu7c()
{
  {
    init_simple_test("BFu31ll_BFu16s_BFu7c");
    static STRUCT_IF_C BFu31ll_BFu16s_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31ll_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu16s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_BFu7c, BFu31ll_BFu16s_BFu7c)
//============================================================================


struct  BFu31ll_BFu16s_BFu7i  {
  __tsu64 v1:31;
  unsigned short v2:16;
  unsigned int v3:7;
};
//SIG(1 BFu31ll_BFu16s_BFu7i) C1{ FL:31 Fs:16 Fi:7}



static void Test_BFu31ll_BFu16s_BFu7i()
{
  {
    init_simple_test("BFu31ll_BFu16s_BFu7i");
    static STRUCT_IF_C BFu31ll_BFu16s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31ll_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu16s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_BFu7i, BFu31ll_BFu16s_BFu7i)
//============================================================================


struct  BFu31ll_BFu16s_BFu7ll  {
  __tsu64 v1:31;
  unsigned short v2:16;
  __tsu64 v3:7;
};
//SIG(1 BFu31ll_BFu16s_BFu7ll) C1{ FL:31 Fs:16 FL:7}



static void Test_BFu31ll_BFu16s_BFu7ll()
{
  {
    init_simple_test("BFu31ll_BFu16s_BFu7ll");
    static STRUCT_IF_C BFu31ll_BFu16s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31ll_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu16s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_BFu7ll, BFu31ll_BFu16s_BFu7ll)
//============================================================================


struct  BFu31ll_BFu16s_BFu7s  {
  __tsu64 v1:31;
  unsigned short v2:16;
  unsigned short v3:7;
};
//SIG(1 BFu31ll_BFu16s_BFu7s) C1{ FL:31 Fs:16 Fs:7}



static void Test_BFu31ll_BFu16s_BFu7s()
{
  {
    init_simple_test("BFu31ll_BFu16s_BFu7s");
    static STRUCT_IF_C BFu31ll_BFu16s_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31ll_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu16s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_BFu7s, BFu31ll_BFu16s_BFu7s)
//============================================================================


struct  BFu31ll_BFu16s_BFu8c  {
  __tsu64 v1:31;
  unsigned short v2:16;
  unsigned char v3:8;
};
//SIG(1 BFu31ll_BFu16s_BFu8c) C1{ FL:31 Fs:16 Fc:8}



static void Test_BFu31ll_BFu16s_BFu8c()
{
  {
    init_simple_test("BFu31ll_BFu16s_BFu8c");
    static STRUCT_IF_C BFu31ll_BFu16s_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31ll_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu16s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_BFu8c, BFu31ll_BFu16s_BFu8c)
//============================================================================


struct  BFu31ll_BFu16s_BFu8i  {
  __tsu64 v1:31;
  unsigned short v2:16;
  unsigned int v3:8;
};
//SIG(1 BFu31ll_BFu16s_BFu8i) C1{ FL:31 Fs:16 Fi:8}



static void Test_BFu31ll_BFu16s_BFu8i()
{
  {
    init_simple_test("BFu31ll_BFu16s_BFu8i");
    static STRUCT_IF_C BFu31ll_BFu16s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31ll_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu16s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_BFu8i, BFu31ll_BFu16s_BFu8i)
//============================================================================


struct  BFu31ll_BFu16s_BFu8ll  {
  __tsu64 v1:31;
  unsigned short v2:16;
  __tsu64 v3:8;
};
//SIG(1 BFu31ll_BFu16s_BFu8ll) C1{ FL:31 Fs:16 FL:8}



static void Test_BFu31ll_BFu16s_BFu8ll()
{
  {
    init_simple_test("BFu31ll_BFu16s_BFu8ll");
    static STRUCT_IF_C BFu31ll_BFu16s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31ll_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu16s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_BFu8ll, BFu31ll_BFu16s_BFu8ll)
//============================================================================


struct  BFu31ll_BFu16s_BFu8s  {
  __tsu64 v1:31;
  unsigned short v2:16;
  unsigned short v3:8;
};
//SIG(1 BFu31ll_BFu16s_BFu8s) C1{ FL:31 Fs:16 Fs:8}



static void Test_BFu31ll_BFu16s_BFu8s()
{
  {
    init_simple_test("BFu31ll_BFu16s_BFu8s");
    static STRUCT_IF_C BFu31ll_BFu16s_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31ll_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu16s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_BFu8s, BFu31ll_BFu16s_BFu8s)
//============================================================================


struct  BFu31ll_BFu16s_BFu9i  {
  __tsu64 v1:31;
  unsigned short v2:16;
  unsigned int v3:9;
};
//SIG(1 BFu31ll_BFu16s_BFu9i) C1{ FL:31 Fs:16 Fi:9}



static void Test_BFu31ll_BFu16s_BFu9i()
{
  {
    init_simple_test("BFu31ll_BFu16s_BFu9i");
    static STRUCT_IF_C BFu31ll_BFu16s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31ll_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu16s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_BFu9i, BFu31ll_BFu16s_BFu9i)
//============================================================================


struct  BFu31ll_BFu16s_BFu9ll  {
  __tsu64 v1:31;
  unsigned short v2:16;
  __tsu64 v3:9;
};
//SIG(1 BFu31ll_BFu16s_BFu9ll) C1{ FL:31 Fs:16 FL:9}



static void Test_BFu31ll_BFu16s_BFu9ll()
{
  {
    init_simple_test("BFu31ll_BFu16s_BFu9ll");
    static STRUCT_IF_C BFu31ll_BFu16s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31ll_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu16s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_BFu9ll, BFu31ll_BFu16s_BFu9ll)
//============================================================================


struct  BFu31ll_BFu16s_BFu9s  {
  __tsu64 v1:31;
  unsigned short v2:16;
  unsigned short v3:9;
};
//SIG(1 BFu31ll_BFu16s_BFu9s) C1{ FL:31 Fs:16 Fs:9}



static void Test_BFu31ll_BFu16s_BFu9s()
{
  {
    init_simple_test("BFu31ll_BFu16s_BFu9s");
    static STRUCT_IF_C BFu31ll_BFu16s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31ll_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu16s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_BFu9s, BFu31ll_BFu16s_BFu9s)
//============================================================================


struct  BFu31ll_BFu16s_C  {
  __tsu64 v1:31;
  unsigned short v2:16;
  char v3;
};
//SIG(1 BFu31ll_BFu16s_C) C1{ FL:31 Fs:16 Fc}



static void Test_BFu31ll_BFu16s_C()
{
  {
    init_simple_test("BFu31ll_BFu16s_C");
    static STRUCT_IF_C BFu31ll_BFu16s_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_C");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_C");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_C");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu16s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_C, BFu31ll_BFu16s_C)
//============================================================================


struct  BFu31ll_BFu16s_D  {
  __tsu64 v1:31;
  unsigned short v2:16;
  double v3;
};
//SIG(1 BFu31ll_BFu16s_D) C1{ FL:31 Fs:16 FL}



static void Test_BFu31ll_BFu16s_D()
{
  {
    init_simple_test("BFu31ll_BFu16s_D");
    static STRUCT_IF_C BFu31ll_BFu16s_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu16s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_D");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_D");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_D");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu16s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_D, BFu31ll_BFu16s_D)
//============================================================================


struct  BFu31ll_BFu16s_F  {
  __tsu64 v1:31;
  unsigned short v2:16;
  float v3;
};
//SIG(1 BFu31ll_BFu16s_F) C1{ FL:31 Fs:16 Fi}



static void Test_BFu31ll_BFu16s_F()
{
  {
    init_simple_test("BFu31ll_BFu16s_F");
    static STRUCT_IF_C BFu31ll_BFu16s_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_F");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_F");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_F");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu16s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_F, BFu31ll_BFu16s_F)
//============================================================================


struct  BFu31ll_BFu16s_I  {
  __tsu64 v1:31;
  unsigned short v2:16;
  int v3;
};
//SIG(1 BFu31ll_BFu16s_I) C1{ FL:31 Fs:16 Fi}



static void Test_BFu31ll_BFu16s_I()
{
  {
    init_simple_test("BFu31ll_BFu16s_I");
    static STRUCT_IF_C BFu31ll_BFu16s_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_I");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_I");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_I");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu16s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_I, BFu31ll_BFu16s_I)
//============================================================================


struct  BFu31ll_BFu16s_Ip  {
  __tsu64 v1:31;
  unsigned short v2:16;
  int *v3;
};
//SIG(1 BFu31ll_BFu16s_Ip) C1{ FL:31 Fs:16 Fp}



static void Test_BFu31ll_BFu16s_Ip()
{
  {
    init_simple_test("BFu31ll_BFu16s_Ip");
    static STRUCT_IF_C BFu31ll_BFu16s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_Ip");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_Ip");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_Ip");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu16s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_Ip, BFu31ll_BFu16s_Ip)
//============================================================================


struct  BFu31ll_BFu16s_L  {
  __tsu64 v1:31;
  unsigned short v2:16;
  __tsi64 v3;
};
//SIG(1 BFu31ll_BFu16s_L) C1{ FL:31 Fs:16 FL}



static void Test_BFu31ll_BFu16s_L()
{
  {
    init_simple_test("BFu31ll_BFu16s_L");
    static STRUCT_IF_C BFu31ll_BFu16s_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu16s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_L");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_L");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_L");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu16s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_L, BFu31ll_BFu16s_L)
//============================================================================


struct  BFu31ll_BFu16s_S  {
  __tsu64 v1:31;
  unsigned short v2:16;
  short v3;
};
//SIG(1 BFu31ll_BFu16s_S) C1{ FL:31 Fs:16 Fs}



static void Test_BFu31ll_BFu16s_S()
{
  {
    init_simple_test("BFu31ll_BFu16s_S");
    static STRUCT_IF_C BFu31ll_BFu16s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_S");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_S");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_S");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu16s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_S, BFu31ll_BFu16s_S)
//============================================================================


struct  BFu31ll_BFu16s_Uc  {
  __tsu64 v1:31;
  unsigned short v2:16;
  unsigned char v3;
};
//SIG(1 BFu31ll_BFu16s_Uc) C1{ FL:31 Fs:16 Fc}



static void Test_BFu31ll_BFu16s_Uc()
{
  {
    init_simple_test("BFu31ll_BFu16s_Uc");
    static STRUCT_IF_C BFu31ll_BFu16s_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_Uc");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_Uc");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_Uc");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu16s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_Uc, BFu31ll_BFu16s_Uc)
//============================================================================


struct  BFu31ll_BFu16s_Ui  {
  __tsu64 v1:31;
  unsigned short v2:16;
  unsigned int v3;
};
//SIG(1 BFu31ll_BFu16s_Ui) C1{ FL:31 Fs:16 Fi}



static void Test_BFu31ll_BFu16s_Ui()
{
  {
    init_simple_test("BFu31ll_BFu16s_Ui");
    static STRUCT_IF_C BFu31ll_BFu16s_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_Ui");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_Ui");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_Ui");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu16s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_Ui, BFu31ll_BFu16s_Ui)
//============================================================================


struct  BFu31ll_BFu16s_Ul  {
  __tsu64 v1:31;
  unsigned short v2:16;
  __tsu64 v3;
};
//SIG(1 BFu31ll_BFu16s_Ul) C1{ FL:31 Fs:16 FL}



static void Test_BFu31ll_BFu16s_Ul()
{
  {
    init_simple_test("BFu31ll_BFu16s_Ul");
    static STRUCT_IF_C BFu31ll_BFu16s_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu16s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_Ul");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_Ul");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_Ul");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu16s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_Ul, BFu31ll_BFu16s_Ul)
//============================================================================


struct  BFu31ll_BFu16s_Us  {
  __tsu64 v1:31;
  unsigned short v2:16;
  unsigned short v3;
};
//SIG(1 BFu31ll_BFu16s_Us) C1{ FL:31 Fs:16 Fs}



static void Test_BFu31ll_BFu16s_Us()
{
  {
    init_simple_test("BFu31ll_BFu16s_Us");
    static STRUCT_IF_C BFu31ll_BFu16s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_Us");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_Us");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_Us");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu16s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_Us, BFu31ll_BFu16s_Us)
//============================================================================


struct  BFu31ll_BFu16s_Vp  {
  __tsu64 v1:31;
  unsigned short v2:16;
  void *v3;
};
//SIG(1 BFu31ll_BFu16s_Vp) C1{ FL:31 Fs:16 Fp}



static void Test_BFu31ll_BFu16s_Vp()
{
  {
    init_simple_test("BFu31ll_BFu16s_Vp");
    static STRUCT_IF_C BFu31ll_BFu16s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu16s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_Vp");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_Vp");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_Vp");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu16s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu16s_Vp, BFu31ll_BFu16s_Vp)
//============================================================================


struct  BFu31ll_BFu17i  {
  __tsu64 v1:31;
  unsigned int v2:17;
};
//SIG(1 BFu31ll_BFu17i) C1{ FL:31 Fi:17}



static void Test_BFu31ll_BFu17i()
{
  {
    init_simple_test("BFu31ll_BFu17i");
    static STRUCT_IF_C BFu31ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i, BFu31ll_BFu17i)
//============================================================================


struct  BFu31ll_BFu17i_BFu15i  {
  __tsu64 v1:31;
  unsigned int v2:17;
  unsigned int v3:15;
};
//SIG(1 BFu31ll_BFu17i_BFu15i) C1{ FL:31 Fi:17 Fi:15}



static void Test_BFu31ll_BFu17i_BFu15i()
{
  {
    init_simple_test("BFu31ll_BFu17i_BFu15i");
    static STRUCT_IF_C BFu31ll_BFu17i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 6, 1, 15, 1, "BFu31ll_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 6, 1, 15, hide_ull(1LL<<14), "BFu31ll_BFu17i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_BFu15i, BFu31ll_BFu17i_BFu15i)
//============================================================================


struct  BFu31ll_BFu17i_BFu15ll  {
  __tsu64 v1:31;
  unsigned int v2:17;
  __tsu64 v3:15;
};
//SIG(1 BFu31ll_BFu17i_BFu15ll) C1{ FL:31 Fi:17 FL:15}



static void Test_BFu31ll_BFu17i_BFu15ll()
{
  {
    init_simple_test("BFu31ll_BFu17i_BFu15ll");
    static STRUCT_IF_C BFu31ll_BFu17i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 6, 1, 15, 1, "BFu31ll_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 6, 1, 15, hide_ull(1LL<<14), "BFu31ll_BFu17i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_BFu15ll, BFu31ll_BFu17i_BFu15ll)
//============================================================================


struct  BFu31ll_BFu17i_BFu15s  {
  __tsu64 v1:31;
  unsigned int v2:17;
  unsigned short v3:15;
};
//SIG(1 BFu31ll_BFu17i_BFu15s) C1{ FL:31 Fi:17 Fs:15}



static void Test_BFu31ll_BFu17i_BFu15s()
{
  {
    init_simple_test("BFu31ll_BFu17i_BFu15s");
    static STRUCT_IF_C BFu31ll_BFu17i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 6, 1, 15, 1, "BFu31ll_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 6, 1, 15, hide_ull(1LL<<14), "BFu31ll_BFu17i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_BFu15s, BFu31ll_BFu17i_BFu15s)
//============================================================================


struct  BFu31ll_BFu17i_BFu16i  {
  __tsu64 v1:31;
  unsigned int v2:17;
  unsigned int v3:16;
};
//SIG(1 BFu31ll_BFu17i_BFu16i) C1{ FL:31 Fi:17 Fi:16}



static void Test_BFu31ll_BFu17i_BFu16i()
{
  {
    init_simple_test("BFu31ll_BFu17i_BFu16i");
    static STRUCT_IF_C BFu31ll_BFu17i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31ll_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu17i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_BFu16i, BFu31ll_BFu17i_BFu16i)
//============================================================================


struct  BFu31ll_BFu17i_BFu16ll  {
  __tsu64 v1:31;
  unsigned int v2:17;
  __tsu64 v3:16;
};
//SIG(1 BFu31ll_BFu17i_BFu16ll) C1{ FL:31 Fi:17 FL:16}



static void Test_BFu31ll_BFu17i_BFu16ll()
{
  {
    init_simple_test("BFu31ll_BFu17i_BFu16ll");
    static STRUCT_IF_C BFu31ll_BFu17i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 16, 1, "BFu31ll_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 16, hide_ull(1LL<<15), "BFu31ll_BFu17i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_BFu16ll, BFu31ll_BFu17i_BFu16ll)
//============================================================================


struct  BFu31ll_BFu17i_BFu16s  {
  __tsu64 v1:31;
  unsigned int v2:17;
  unsigned short v3:16;
};
//SIG(1 BFu31ll_BFu17i_BFu16s) C1{ FL:31 Fi:17 Fs:16}



static void Test_BFu31ll_BFu17i_BFu16s()
{
  {
    init_simple_test("BFu31ll_BFu17i_BFu16s");
    static STRUCT_IF_C BFu31ll_BFu17i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31ll_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu17i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_BFu16s, BFu31ll_BFu17i_BFu16s)
//============================================================================


struct  BFu31ll_BFu17i_BFu17i  {
  __tsu64 v1:31;
  unsigned int v2:17;
  unsigned int v3:17;
};
//SIG(1 BFu31ll_BFu17i_BFu17i) C1{ FL:31 Fi:17 Fi:17}



static void Test_BFu31ll_BFu17i_BFu17i()
{
  {
    init_simple_test("BFu31ll_BFu17i_BFu17i");
    static STRUCT_IF_C BFu31ll_BFu17i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31ll_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_BFu17i, BFu31ll_BFu17i_BFu17i)
//============================================================================


struct  BFu31ll_BFu17i_BFu17ll  {
  __tsu64 v1:31;
  unsigned int v2:17;
  __tsu64 v3:17;
};
//SIG(1 BFu31ll_BFu17i_BFu17ll) C1{ FL:31 Fi:17 FL:17}



static void Test_BFu31ll_BFu17i_BFu17ll()
{
  {
    init_simple_test("BFu31ll_BFu17i_BFu17ll");
    static STRUCT_IF_C BFu31ll_BFu17i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, 1, "BFu31ll_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_BFu17ll, BFu31ll_BFu17i_BFu17ll)
//============================================================================


struct  BFu31ll_BFu17i_BFu1c  {
  __tsu64 v1:31;
  unsigned int v2:17;
  unsigned char v3:1;
};
//SIG(1 BFu31ll_BFu17i_BFu1c) C1{ FL:31 Fi:17 Fc:1}



static void Test_BFu31ll_BFu17i_BFu1c()
{
  {
    init_simple_test("BFu31ll_BFu17i_BFu1c");
    static STRUCT_IF_C BFu31ll_BFu17i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu1c");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu31ll_BFu17i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_BFu1c, BFu31ll_BFu17i_BFu1c)
//============================================================================


struct  BFu31ll_BFu17i_BFu1i  {
  __tsu64 v1:31;
  unsigned int v2:17;
  unsigned int v3:1;
};
//SIG(1 BFu31ll_BFu17i_BFu1i) C1{ FL:31 Fi:17 Fi:1}



static void Test_BFu31ll_BFu17i_BFu1i()
{
  {
    init_simple_test("BFu31ll_BFu17i_BFu1i");
    static STRUCT_IF_C BFu31ll_BFu17i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu1i");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu31ll_BFu17i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_BFu1i, BFu31ll_BFu17i_BFu1i)
//============================================================================


struct  BFu31ll_BFu17i_BFu1ll  {
  __tsu64 v1:31;
  unsigned int v2:17;
  __tsu64 v3:1;
};
//SIG(1 BFu31ll_BFu17i_BFu1ll) C1{ FL:31 Fi:17 FL:1}



static void Test_BFu31ll_BFu17i_BFu1ll()
{
  {
    init_simple_test("BFu31ll_BFu17i_BFu1ll");
    static STRUCT_IF_C BFu31ll_BFu17i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu1ll");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu31ll_BFu17i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_BFu1ll, BFu31ll_BFu17i_BFu1ll)
//============================================================================


struct  BFu31ll_BFu17i_BFu1s  {
  __tsu64 v1:31;
  unsigned int v2:17;
  unsigned short v3:1;
};
//SIG(1 BFu31ll_BFu17i_BFu1s) C1{ FL:31 Fi:17 Fs:1}



static void Test_BFu31ll_BFu17i_BFu1s()
{
  {
    init_simple_test("BFu31ll_BFu17i_BFu1s");
    static STRUCT_IF_C BFu31ll_BFu17i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu1s");
    set_bf_and_test(lv, v3, 6, 1, 1, 1, "BFu31ll_BFu17i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_BFu1s, BFu31ll_BFu17i_BFu1s)
//============================================================================


struct  BFu31ll_BFu17i_BFu31i  {
  __tsu64 v1:31;
  unsigned int v2:17;
  unsigned int v3:31;
};
//SIG(1 BFu31ll_BFu17i_BFu31i) C1{ FL:31 Fi:17 Fi:31}



static void Test_BFu31ll_BFu17i_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFu17i_BFu31i");
    static STRUCT_IF_C BFu31ll_BFu17i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_BFu31i, BFu31ll_BFu17i_BFu31i)
//============================================================================


struct  BFu31ll_BFu17i_BFu31ll  {
  __tsu64 v1:31;
  unsigned int v2:17;
  __tsu64 v3:31;
};
//SIG(1 BFu31ll_BFu17i_BFu31ll) C1{ FL:31 Fi:17 FL:31}



static void Test_BFu31ll_BFu17i_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFu17i_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFu17i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 31, 1, "BFu31ll_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_BFu31ll, BFu31ll_BFu17i_BFu31ll)
//============================================================================


struct  BFu31ll_BFu17i_BFu32i  {
  __tsu64 v1:31;
  unsigned int v2:17;
  unsigned int v3:32;
};
//SIG(1 BFu31ll_BFu17i_BFu32i) C1{ FL:31 Fi:17 Fi:32}



static void Test_BFu31ll_BFu17i_BFu32i()
{
  {
    init_simple_test("BFu31ll_BFu17i_BFu32i");
    static STRUCT_IF_C BFu31ll_BFu17i_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31ll_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu17i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_BFu32i, BFu31ll_BFu17i_BFu32i)
//============================================================================


struct  BFu31ll_BFu17i_BFu32ll  {
  __tsu64 v1:31;
  unsigned int v2:17;
  __tsu64 v3:32;
};
//SIG(1 BFu31ll_BFu17i_BFu32ll) C1{ FL:31 Fi:17 FL:32}



static void Test_BFu31ll_BFu17i_BFu32ll()
{
  {
    init_simple_test("BFu31ll_BFu17i_BFu32ll");
    static STRUCT_IF_C BFu31ll_BFu17i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 32, 1, "BFu31ll_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 32, hide_ull(1LL<<31), "BFu31ll_BFu17i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_BFu32ll, BFu31ll_BFu17i_BFu32ll)
//============================================================================


struct  BFu31ll_BFu17i_BFu33  {
  __tsu64 v1:31;
  unsigned int v2:17;
  __tsu64 v3:33;
};
//SIG(1 BFu31ll_BFu17i_BFu33) C1{ FL:31 Fi:17 FL:33}



static void Test_BFu31ll_BFu17i_BFu33()
{
  {
    init_simple_test("BFu31ll_BFu17i_BFu33");
    static STRUCT_IF_C BFu31ll_BFu17i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 33, 1, "BFu31ll_BFu17i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), ABISELECT(0,1), 33, hide_ull(1LL<<32), "BFu31ll_BFu17i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_BFu33, BFu31ll_BFu17i_BFu33)
//============================================================================


struct  BFu31ll_BFu17i_BFu7c  {
  __tsu64 v1:31;
  unsigned int v2:17;
  unsigned char v3:7;
};
//SIG(1 BFu31ll_BFu17i_BFu7c) C1{ FL:31 Fi:17 Fc:7}



static void Test_BFu31ll_BFu17i_BFu7c()
{
  {
    init_simple_test("BFu31ll_BFu17i_BFu7c");
    static STRUCT_IF_C BFu31ll_BFu17i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu31ll_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu31ll_BFu17i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_BFu7c, BFu31ll_BFu17i_BFu7c)
//============================================================================


struct  BFu31ll_BFu17i_BFu7i  {
  __tsu64 v1:31;
  unsigned int v2:17;
  unsigned int v3:7;
};
//SIG(1 BFu31ll_BFu17i_BFu7i) C1{ FL:31 Fi:17 Fi:7}



static void Test_BFu31ll_BFu17i_BFu7i()
{
  {
    init_simple_test("BFu31ll_BFu17i_BFu7i");
    static STRUCT_IF_C BFu31ll_BFu17i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu31ll_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu31ll_BFu17i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_BFu7i, BFu31ll_BFu17i_BFu7i)
//============================================================================


struct  BFu31ll_BFu17i_BFu7ll  {
  __tsu64 v1:31;
  unsigned int v2:17;
  __tsu64 v3:7;
};
//SIG(1 BFu31ll_BFu17i_BFu7ll) C1{ FL:31 Fi:17 FL:7}



static void Test_BFu31ll_BFu17i_BFu7ll()
{
  {
    init_simple_test("BFu31ll_BFu17i_BFu7ll");
    static STRUCT_IF_C BFu31ll_BFu17i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu31ll_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu31ll_BFu17i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_BFu7ll, BFu31ll_BFu17i_BFu7ll)
//============================================================================


struct  BFu31ll_BFu17i_BFu7s  {
  __tsu64 v1:31;
  unsigned int v2:17;
  unsigned short v3:7;
};
//SIG(1 BFu31ll_BFu17i_BFu7s) C1{ FL:31 Fi:17 Fs:7}



static void Test_BFu31ll_BFu17i_BFu7s()
{
  {
    init_simple_test("BFu31ll_BFu17i_BFu7s");
    static STRUCT_IF_C BFu31ll_BFu17i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 6, 1, 7, 1, "BFu31ll_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 6, 1, 7, hide_ull(1LL<<6), "BFu31ll_BFu17i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_BFu7s, BFu31ll_BFu17i_BFu7s)
//============================================================================


struct  BFu31ll_BFu17i_BFu8c  {
  __tsu64 v1:31;
  unsigned int v2:17;
  unsigned char v3:8;
};
//SIG(1 BFu31ll_BFu17i_BFu8c) C1{ FL:31 Fi:17 Fc:8}



static void Test_BFu31ll_BFu17i_BFu8c()
{
  {
    init_simple_test("BFu31ll_BFu17i_BFu8c");
    static STRUCT_IF_C BFu31ll_BFu17i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 7, 0, 8, 1, "BFu31ll_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 7, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu17i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_BFu8c, BFu31ll_BFu17i_BFu8c)
//============================================================================


struct  BFu31ll_BFu17i_BFu8i  {
  __tsu64 v1:31;
  unsigned int v2:17;
  unsigned int v3:8;
};
//SIG(1 BFu31ll_BFu17i_BFu8i) C1{ FL:31 Fi:17 Fi:8}



static void Test_BFu31ll_BFu17i_BFu8i()
{
  {
    init_simple_test("BFu31ll_BFu17i_BFu8i");
    static STRUCT_IF_C BFu31ll_BFu17i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 6, 1, 8, 1, "BFu31ll_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 6, 1, 8, hide_ull(1LL<<7), "BFu31ll_BFu17i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_BFu8i, BFu31ll_BFu17i_BFu8i)
//============================================================================


struct  BFu31ll_BFu17i_BFu8ll  {
  __tsu64 v1:31;
  unsigned int v2:17;
  __tsu64 v3:8;
};
//SIG(1 BFu31ll_BFu17i_BFu8ll) C1{ FL:31 Fi:17 FL:8}



static void Test_BFu31ll_BFu17i_BFu8ll()
{
  {
    init_simple_test("BFu31ll_BFu17i_BFu8ll");
    static STRUCT_IF_C BFu31ll_BFu17i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 6, 1, 8, 1, "BFu31ll_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 6, 1, 8, hide_ull(1LL<<7), "BFu31ll_BFu17i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_BFu8ll, BFu31ll_BFu17i_BFu8ll)
//============================================================================


struct  BFu31ll_BFu17i_BFu8s  {
  __tsu64 v1:31;
  unsigned int v2:17;
  unsigned short v3:8;
};
//SIG(1 BFu31ll_BFu17i_BFu8s) C1{ FL:31 Fi:17 Fs:8}



static void Test_BFu31ll_BFu17i_BFu8s()
{
  {
    init_simple_test("BFu31ll_BFu17i_BFu8s");
    static STRUCT_IF_C BFu31ll_BFu17i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 6, 1, 8, 1, "BFu31ll_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 6, 1, 8, hide_ull(1LL<<7), "BFu31ll_BFu17i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_BFu8s, BFu31ll_BFu17i_BFu8s)
//============================================================================


struct  BFu31ll_BFu17i_BFu9i  {
  __tsu64 v1:31;
  unsigned int v2:17;
  unsigned int v3:9;
};
//SIG(1 BFu31ll_BFu17i_BFu9i) C1{ FL:31 Fi:17 Fi:9}



static void Test_BFu31ll_BFu17i_BFu9i()
{
  {
    init_simple_test("BFu31ll_BFu17i_BFu9i");
    static STRUCT_IF_C BFu31ll_BFu17i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 6, 1, 9, 1, "BFu31ll_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 6, 1, 9, hide_ull(1LL<<8), "BFu31ll_BFu17i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_BFu9i, BFu31ll_BFu17i_BFu9i)
//============================================================================


struct  BFu31ll_BFu17i_BFu9ll  {
  __tsu64 v1:31;
  unsigned int v2:17;
  __tsu64 v3:9;
};
//SIG(1 BFu31ll_BFu17i_BFu9ll) C1{ FL:31 Fi:17 FL:9}



static void Test_BFu31ll_BFu17i_BFu9ll()
{
  {
    init_simple_test("BFu31ll_BFu17i_BFu9ll");
    static STRUCT_IF_C BFu31ll_BFu17i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 6, 1, 9, 1, "BFu31ll_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 6, 1, 9, hide_ull(1LL<<8), "BFu31ll_BFu17i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_BFu9ll, BFu31ll_BFu17i_BFu9ll)
//============================================================================


struct  BFu31ll_BFu17i_BFu9s  {
  __tsu64 v1:31;
  unsigned int v2:17;
  unsigned short v3:9;
};
//SIG(1 BFu31ll_BFu17i_BFu9s) C1{ FL:31 Fi:17 Fs:9}



static void Test_BFu31ll_BFu17i_BFu9s()
{
  {
    init_simple_test("BFu31ll_BFu17i_BFu9s");
    static STRUCT_IF_C BFu31ll_BFu17i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 6, 1, 9, 1, "BFu31ll_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 6, 1, 9, hide_ull(1LL<<8), "BFu31ll_BFu17i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_BFu9s, BFu31ll_BFu17i_BFu9s)
//============================================================================


struct  BFu31ll_BFu17i_C  {
  __tsu64 v1:31;
  unsigned int v2:17;
  char v3;
};
//SIG(1 BFu31ll_BFu17i_C) C1{ FL:31 Fi:17 Fc}



static void Test_BFu31ll_BFu17i_C()
{
  {
    init_simple_test("BFu31ll_BFu17i_C");
    static STRUCT_IF_C BFu31ll_BFu17i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_C");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_C");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_C");
    check_field_offset(lv, v3, 7, "BFu31ll_BFu17i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_C, BFu31ll_BFu17i_C)
//============================================================================


struct  BFu31ll_BFu17i_D  {
  __tsu64 v1:31;
  unsigned int v2:17;
  double v3;
};
//SIG(1 BFu31ll_BFu17i_D) C1{ FL:31 Fi:17 FL}



static void Test_BFu31ll_BFu17i_D()
{
  {
    init_simple_test("BFu31ll_BFu17i_D");
    static STRUCT_IF_C BFu31ll_BFu17i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu17i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_D");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_D");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_D");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu17i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_D, BFu31ll_BFu17i_D)
//============================================================================


struct  BFu31ll_BFu17i_F  {
  __tsu64 v1:31;
  unsigned int v2:17;
  float v3;
};
//SIG(1 BFu31ll_BFu17i_F) C1{ FL:31 Fi:17 Fi}



static void Test_BFu31ll_BFu17i_F()
{
  {
    init_simple_test("BFu31ll_BFu17i_F");
    static STRUCT_IF_C BFu31ll_BFu17i_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_F");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_F");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_F");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu17i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_F, BFu31ll_BFu17i_F)
//============================================================================


struct  BFu31ll_BFu17i_I  {
  __tsu64 v1:31;
  unsigned int v2:17;
  int v3;
};
//SIG(1 BFu31ll_BFu17i_I) C1{ FL:31 Fi:17 Fi}



static void Test_BFu31ll_BFu17i_I()
{
  {
    init_simple_test("BFu31ll_BFu17i_I");
    static STRUCT_IF_C BFu31ll_BFu17i_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_I");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_I");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_I");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu17i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_I, BFu31ll_BFu17i_I)
//============================================================================


struct  BFu31ll_BFu17i_Ip  {
  __tsu64 v1:31;
  unsigned int v2:17;
  int *v3;
};
//SIG(1 BFu31ll_BFu17i_Ip) C1{ FL:31 Fi:17 Fp}



static void Test_BFu31ll_BFu17i_Ip()
{
  {
    init_simple_test("BFu31ll_BFu17i_Ip");
    static STRUCT_IF_C BFu31ll_BFu17i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_Ip");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu17i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_Ip, BFu31ll_BFu17i_Ip)
//============================================================================


struct  BFu31ll_BFu17i_L  {
  __tsu64 v1:31;
  unsigned int v2:17;
  __tsi64 v3;
};
//SIG(1 BFu31ll_BFu17i_L) C1{ FL:31 Fi:17 FL}



static void Test_BFu31ll_BFu17i_L()
{
  {
    init_simple_test("BFu31ll_BFu17i_L");
    static STRUCT_IF_C BFu31ll_BFu17i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu17i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_L");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_L");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_L");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu17i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_L, BFu31ll_BFu17i_L)
//============================================================================


struct  BFu31ll_BFu17i_S  {
  __tsu64 v1:31;
  unsigned int v2:17;
  short v3;
};
//SIG(1 BFu31ll_BFu17i_S) C1{ FL:31 Fi:17 Fs}



static void Test_BFu31ll_BFu17i_S()
{
  {
    init_simple_test("BFu31ll_BFu17i_S");
    static STRUCT_IF_C BFu31ll_BFu17i_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_S");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_S");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_S");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu17i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_S, BFu31ll_BFu17i_S)
//============================================================================


struct  BFu31ll_BFu17i_Uc  {
  __tsu64 v1:31;
  unsigned int v2:17;
  unsigned char v3;
};
//SIG(1 BFu31ll_BFu17i_Uc) C1{ FL:31 Fi:17 Fc}



static void Test_BFu31ll_BFu17i_Uc()
{
  {
    init_simple_test("BFu31ll_BFu17i_Uc");
    static STRUCT_IF_C BFu31ll_BFu17i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_Uc");
    check_field_offset(lv, v3, 7, "BFu31ll_BFu17i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_Uc, BFu31ll_BFu17i_Uc)
//============================================================================


struct  BFu31ll_BFu17i_Ui  {
  __tsu64 v1:31;
  unsigned int v2:17;
  unsigned int v3;
};
//SIG(1 BFu31ll_BFu17i_Ui) C1{ FL:31 Fi:17 Fi}



static void Test_BFu31ll_BFu17i_Ui()
{
  {
    init_simple_test("BFu31ll_BFu17i_Ui");
    static STRUCT_IF_C BFu31ll_BFu17i_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_Ui");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu17i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_Ui, BFu31ll_BFu17i_Ui)
//============================================================================


struct  BFu31ll_BFu17i_Ul  {
  __tsu64 v1:31;
  unsigned int v2:17;
  __tsu64 v3;
};
//SIG(1 BFu31ll_BFu17i_Ul) C1{ FL:31 Fi:17 FL}



static void Test_BFu31ll_BFu17i_Ul()
{
  {
    init_simple_test("BFu31ll_BFu17i_Ul");
    static STRUCT_IF_C BFu31ll_BFu17i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu17i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_Ul");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu17i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_Ul, BFu31ll_BFu17i_Ul)
//============================================================================


struct  BFu31ll_BFu17i_Us  {
  __tsu64 v1:31;
  unsigned int v2:17;
  unsigned short v3;
};
//SIG(1 BFu31ll_BFu17i_Us) C1{ FL:31 Fi:17 Fs}



static void Test_BFu31ll_BFu17i_Us()
{
  {
    init_simple_test("BFu31ll_BFu17i_Us");
    static STRUCT_IF_C BFu31ll_BFu17i_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_Us");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_Us");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_Us");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu17i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_Us, BFu31ll_BFu17i_Us)
//============================================================================


struct  BFu31ll_BFu17i_Vp  {
  __tsu64 v1:31;
  unsigned int v2:17;
  void *v3;
};
//SIG(1 BFu31ll_BFu17i_Vp) C1{ FL:31 Fi:17 Fp}



static void Test_BFu31ll_BFu17i_Vp()
{
  {
    init_simple_test("BFu31ll_BFu17i_Vp");
    static STRUCT_IF_C BFu31ll_BFu17i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_Vp");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu17i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17i_Vp, BFu31ll_BFu17i_Vp)
//============================================================================


struct  BFu31ll_BFu17ll  {
  __tsu64 v1:31;
  __tsu64 v2:17;
};
//SIG(1 BFu31ll_BFu17ll) C1{ FL:31 FL:17}



static void Test_BFu31ll_BFu17ll()
{
  {
    init_simple_test("BFu31ll_BFu17ll");
    static STRUCT_IF_C BFu31ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll, BFu31ll_BFu17ll)
//============================================================================


struct  BFu31ll_BFu17ll_BFu15i  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  unsigned int v3:15;
};
//SIG(1 BFu31ll_BFu17ll_BFu15i) C1{ FL:31 FL:17 Fi:15}



static void Test_BFu31ll_BFu17ll_BFu15i()
{
  {
    init_simple_test("BFu31ll_BFu17ll_BFu15i");
    static STRUCT_IF_C BFu31ll_BFu17ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31ll_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu17ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_BFu15i, BFu31ll_BFu17ll_BFu15i)
//============================================================================


struct  BFu31ll_BFu17ll_BFu15ll  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  __tsu64 v3:15;
};
//SIG(1 BFu31ll_BFu17ll_BFu15ll) C1{ FL:31 FL:17 FL:15}



static void Test_BFu31ll_BFu17ll_BFu15ll()
{
  {
    init_simple_test("BFu31ll_BFu17ll_BFu15ll");
    static STRUCT_IF_C BFu31ll_BFu17ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31ll_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu17ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_BFu15ll, BFu31ll_BFu17ll_BFu15ll)
//============================================================================


struct  BFu31ll_BFu17ll_BFu15s  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  unsigned short v3:15;
};
//SIG(1 BFu31ll_BFu17ll_BFu15s) C1{ FL:31 FL:17 Fs:15}



static void Test_BFu31ll_BFu17ll_BFu15s()
{
  {
    init_simple_test("BFu31ll_BFu17ll_BFu15s");
    static STRUCT_IF_C BFu31ll_BFu17ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31ll_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu17ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_BFu15s, BFu31ll_BFu17ll_BFu15s)
//============================================================================


struct  BFu31ll_BFu17ll_BFu16i  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  unsigned int v3:16;
};
//SIG(1 BFu31ll_BFu17ll_BFu16i) C1{ FL:31 FL:17 Fi:16}



static void Test_BFu31ll_BFu17ll_BFu16i()
{
  {
    init_simple_test("BFu31ll_BFu17ll_BFu16i");
    static STRUCT_IF_C BFu31ll_BFu17ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31ll_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu17ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_BFu16i, BFu31ll_BFu17ll_BFu16i)
//============================================================================


struct  BFu31ll_BFu17ll_BFu16ll  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  __tsu64 v3:16;
};
//SIG(1 BFu31ll_BFu17ll_BFu16ll) C1{ FL:31 FL:17 FL:16}



static void Test_BFu31ll_BFu17ll_BFu16ll()
{
  {
    init_simple_test("BFu31ll_BFu17ll_BFu16ll");
    static STRUCT_IF_C BFu31ll_BFu17ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31ll_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu17ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_BFu16ll, BFu31ll_BFu17ll_BFu16ll)
//============================================================================


struct  BFu31ll_BFu17ll_BFu16s  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  unsigned short v3:16;
};
//SIG(1 BFu31ll_BFu17ll_BFu16s) C1{ FL:31 FL:17 Fs:16}



static void Test_BFu31ll_BFu17ll_BFu16s()
{
  {
    init_simple_test("BFu31ll_BFu17ll_BFu16s");
    static STRUCT_IF_C BFu31ll_BFu17ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31ll_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu17ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_BFu16s, BFu31ll_BFu17ll_BFu16s)
//============================================================================


struct  BFu31ll_BFu17ll_BFu17i  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  unsigned int v3:17;
};
//SIG(1 BFu31ll_BFu17ll_BFu17i) C1{ FL:31 FL:17 Fi:17}



static void Test_BFu31ll_BFu17ll_BFu17i()
{
  {
    init_simple_test("BFu31ll_BFu17ll_BFu17i");
    static STRUCT_IF_C BFu31ll_BFu17ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31ll_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_BFu17i, BFu31ll_BFu17ll_BFu17i)
//============================================================================


struct  BFu31ll_BFu17ll_BFu17ll  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  __tsu64 v3:17;
};
//SIG(1 BFu31ll_BFu17ll_BFu17ll) C1{ FL:31 FL:17 FL:17}



static void Test_BFu31ll_BFu17ll_BFu17ll()
{
  {
    init_simple_test("BFu31ll_BFu17ll_BFu17ll");
    static STRUCT_IF_C BFu31ll_BFu17ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, 1, "BFu31ll_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_BFu17ll, BFu31ll_BFu17ll_BFu17ll)
//============================================================================


struct  BFu31ll_BFu17ll_BFu1c  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  unsigned char v3:1;
};
//SIG(1 BFu31ll_BFu17ll_BFu1c) C1{ FL:31 FL:17 Fc:1}



static void Test_BFu31ll_BFu17ll_BFu1c()
{
  {
    init_simple_test("BFu31ll_BFu17ll_BFu1c");
    static STRUCT_IF_C BFu31ll_BFu17ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu1c");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31ll_BFu17ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_BFu1c, BFu31ll_BFu17ll_BFu1c)
//============================================================================


struct  BFu31ll_BFu17ll_BFu1i  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  unsigned int v3:1;
};
//SIG(1 BFu31ll_BFu17ll_BFu1i) C1{ FL:31 FL:17 Fi:1}



static void Test_BFu31ll_BFu17ll_BFu1i()
{
  {
    init_simple_test("BFu31ll_BFu17ll_BFu1i");
    static STRUCT_IF_C BFu31ll_BFu17ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu1i");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31ll_BFu17ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_BFu1i, BFu31ll_BFu17ll_BFu1i)
//============================================================================


struct  BFu31ll_BFu17ll_BFu1ll  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  __tsu64 v3:1;
};
//SIG(1 BFu31ll_BFu17ll_BFu1ll) C1{ FL:31 FL:17 FL:1}



static void Test_BFu31ll_BFu17ll_BFu1ll()
{
  {
    init_simple_test("BFu31ll_BFu17ll_BFu1ll");
    static STRUCT_IF_C BFu31ll_BFu17ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31ll_BFu17ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_BFu1ll, BFu31ll_BFu17ll_BFu1ll)
//============================================================================


struct  BFu31ll_BFu17ll_BFu1s  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  unsigned short v3:1;
};
//SIG(1 BFu31ll_BFu17ll_BFu1s) C1{ FL:31 FL:17 Fs:1}



static void Test_BFu31ll_BFu17ll_BFu1s()
{
  {
    init_simple_test("BFu31ll_BFu17ll_BFu1s");
    static STRUCT_IF_C BFu31ll_BFu17ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu1s");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu31ll_BFu17ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_BFu1s, BFu31ll_BFu17ll_BFu1s)
//============================================================================


struct  BFu31ll_BFu17ll_BFu31i  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  unsigned int v3:31;
};
//SIG(1 BFu31ll_BFu17ll_BFu31i) C1{ FL:31 FL:17 Fi:31}



static void Test_BFu31ll_BFu17ll_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFu17ll_BFu31i");
    static STRUCT_IF_C BFu31ll_BFu17ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_BFu31i, BFu31ll_BFu17ll_BFu31i)
//============================================================================


struct  BFu31ll_BFu17ll_BFu31ll  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  __tsu64 v3:31;
};
//SIG(1 BFu31ll_BFu17ll_BFu31ll) C1{ FL:31 FL:17 FL:31}



static void Test_BFu31ll_BFu17ll_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFu17ll_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFu17ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, 1, "BFu31ll_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_BFu31ll, BFu31ll_BFu17ll_BFu31ll)
//============================================================================


struct  BFu31ll_BFu17ll_BFu32i  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  unsigned int v3:32;
};
//SIG(1 BFu31ll_BFu17ll_BFu32i) C1{ FL:31 FL:17 Fi:32}



static void Test_BFu31ll_BFu17ll_BFu32i()
{
  {
    init_simple_test("BFu31ll_BFu17ll_BFu32i");
    static STRUCT_IF_C BFu31ll_BFu17ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31ll_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu17ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_BFu32i, BFu31ll_BFu17ll_BFu32i)
//============================================================================


struct  BFu31ll_BFu17ll_BFu32ll  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  __tsu64 v3:32;
};
//SIG(1 BFu31ll_BFu17ll_BFu32ll) C1{ FL:31 FL:17 FL:32}



static void Test_BFu31ll_BFu17ll_BFu32ll()
{
  {
    init_simple_test("BFu31ll_BFu17ll_BFu32ll");
    static STRUCT_IF_C BFu31ll_BFu17ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, 1, "BFu31ll_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu17ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_BFu32ll, BFu31ll_BFu17ll_BFu32ll)
//============================================================================


struct  BFu31ll_BFu17ll_BFu33  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  __tsu64 v3:33;
};
//SIG(1 BFu31ll_BFu17ll_BFu33) C1{ FL:31 FL:17 FL:33}



static void Test_BFu31ll_BFu17ll_BFu33()
{
  {
    init_simple_test("BFu31ll_BFu17ll_BFu33");
    static STRUCT_IF_C BFu31ll_BFu17ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, 1, "BFu31ll_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, hide_ull(1LL<<32), "BFu31ll_BFu17ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_BFu33, BFu31ll_BFu17ll_BFu33)
//============================================================================


struct  BFu31ll_BFu17ll_BFu7c  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  unsigned char v3:7;
};
//SIG(1 BFu31ll_BFu17ll_BFu7c) C1{ FL:31 FL:17 Fc:7}



static void Test_BFu31ll_BFu17ll_BFu7c()
{
  {
    init_simple_test("BFu31ll_BFu17ll_BFu7c");
    static STRUCT_IF_C BFu31ll_BFu17ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31ll_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu17ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_BFu7c, BFu31ll_BFu17ll_BFu7c)
//============================================================================


struct  BFu31ll_BFu17ll_BFu7i  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  unsigned int v3:7;
};
//SIG(1 BFu31ll_BFu17ll_BFu7i) C1{ FL:31 FL:17 Fi:7}



static void Test_BFu31ll_BFu17ll_BFu7i()
{
  {
    init_simple_test("BFu31ll_BFu17ll_BFu7i");
    static STRUCT_IF_C BFu31ll_BFu17ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31ll_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu17ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_BFu7i, BFu31ll_BFu17ll_BFu7i)
//============================================================================


struct  BFu31ll_BFu17ll_BFu7ll  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  __tsu64 v3:7;
};
//SIG(1 BFu31ll_BFu17ll_BFu7ll) C1{ FL:31 FL:17 FL:7}



static void Test_BFu31ll_BFu17ll_BFu7ll()
{
  {
    init_simple_test("BFu31ll_BFu17ll_BFu7ll");
    static STRUCT_IF_C BFu31ll_BFu17ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31ll_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu17ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_BFu7ll, BFu31ll_BFu17ll_BFu7ll)
//============================================================================


struct  BFu31ll_BFu17ll_BFu7s  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  unsigned short v3:7;
};
//SIG(1 BFu31ll_BFu17ll_BFu7s) C1{ FL:31 FL:17 Fs:7}



static void Test_BFu31ll_BFu17ll_BFu7s()
{
  {
    init_simple_test("BFu31ll_BFu17ll_BFu7s");
    static STRUCT_IF_C BFu31ll_BFu17ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu31ll_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu17ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_BFu7s, BFu31ll_BFu17ll_BFu7s)
//============================================================================


struct  BFu31ll_BFu17ll_BFu8c  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  unsigned char v3:8;
};
//SIG(1 BFu31ll_BFu17ll_BFu8c) C1{ FL:31 FL:17 Fc:8}



static void Test_BFu31ll_BFu17ll_BFu8c()
{
  {
    init_simple_test("BFu31ll_BFu17ll_BFu8c");
    static STRUCT_IF_C BFu31ll_BFu17ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31ll_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu17ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_BFu8c, BFu31ll_BFu17ll_BFu8c)
//============================================================================


struct  BFu31ll_BFu17ll_BFu8i  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  unsigned int v3:8;
};
//SIG(1 BFu31ll_BFu17ll_BFu8i) C1{ FL:31 FL:17 Fi:8}



static void Test_BFu31ll_BFu17ll_BFu8i()
{
  {
    init_simple_test("BFu31ll_BFu17ll_BFu8i");
    static STRUCT_IF_C BFu31ll_BFu17ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31ll_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu17ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_BFu8i, BFu31ll_BFu17ll_BFu8i)
//============================================================================


struct  BFu31ll_BFu17ll_BFu8ll  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  __tsu64 v3:8;
};
//SIG(1 BFu31ll_BFu17ll_BFu8ll) C1{ FL:31 FL:17 FL:8}



static void Test_BFu31ll_BFu17ll_BFu8ll()
{
  {
    init_simple_test("BFu31ll_BFu17ll_BFu8ll");
    static STRUCT_IF_C BFu31ll_BFu17ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31ll_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu17ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_BFu8ll, BFu31ll_BFu17ll_BFu8ll)
//============================================================================


struct  BFu31ll_BFu17ll_BFu8s  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  unsigned short v3:8;
};
//SIG(1 BFu31ll_BFu17ll_BFu8s) C1{ FL:31 FL:17 Fs:8}



static void Test_BFu31ll_BFu17ll_BFu8s()
{
  {
    init_simple_test("BFu31ll_BFu17ll_BFu8s");
    static STRUCT_IF_C BFu31ll_BFu17ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu31ll_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu17ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_BFu8s, BFu31ll_BFu17ll_BFu8s)
//============================================================================


struct  BFu31ll_BFu17ll_BFu9i  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  unsigned int v3:9;
};
//SIG(1 BFu31ll_BFu17ll_BFu9i) C1{ FL:31 FL:17 Fi:9}



static void Test_BFu31ll_BFu17ll_BFu9i()
{
  {
    init_simple_test("BFu31ll_BFu17ll_BFu9i");
    static STRUCT_IF_C BFu31ll_BFu17ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31ll_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu17ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_BFu9i, BFu31ll_BFu17ll_BFu9i)
//============================================================================


struct  BFu31ll_BFu17ll_BFu9ll  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  __tsu64 v3:9;
};
//SIG(1 BFu31ll_BFu17ll_BFu9ll) C1{ FL:31 FL:17 FL:9}



static void Test_BFu31ll_BFu17ll_BFu9ll()
{
  {
    init_simple_test("BFu31ll_BFu17ll_BFu9ll");
    static STRUCT_IF_C BFu31ll_BFu17ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31ll_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu17ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_BFu9ll, BFu31ll_BFu17ll_BFu9ll)
//============================================================================


struct  BFu31ll_BFu17ll_BFu9s  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  unsigned short v3:9;
};
//SIG(1 BFu31ll_BFu17ll_BFu9s) C1{ FL:31 FL:17 Fs:9}



static void Test_BFu31ll_BFu17ll_BFu9s()
{
  {
    init_simple_test("BFu31ll_BFu17ll_BFu9s");
    static STRUCT_IF_C BFu31ll_BFu17ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31ll_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu17ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_BFu9s, BFu31ll_BFu17ll_BFu9s)
//============================================================================


struct  BFu31ll_BFu17ll_C  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  char v3;
};
//SIG(1 BFu31ll_BFu17ll_C) C1{ FL:31 FL:17 Fc}



static void Test_BFu31ll_BFu17ll_C()
{
  {
    init_simple_test("BFu31ll_BFu17ll_C");
    static STRUCT_IF_C BFu31ll_BFu17ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_C");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_C");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_C");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu17ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_C, BFu31ll_BFu17ll_C)
//============================================================================


struct  BFu31ll_BFu17ll_D  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  double v3;
};
//SIG(1 BFu31ll_BFu17ll_D) C1{ FL:31 FL:17 FL}



static void Test_BFu31ll_BFu17ll_D()
{
  {
    init_simple_test("BFu31ll_BFu17ll_D");
    static STRUCT_IF_C BFu31ll_BFu17ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu17ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_D");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_D");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_D");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu17ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_D, BFu31ll_BFu17ll_D)
//============================================================================


struct  BFu31ll_BFu17ll_F  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  float v3;
};
//SIG(1 BFu31ll_BFu17ll_F) C1{ FL:31 FL:17 Fi}



static void Test_BFu31ll_BFu17ll_F()
{
  {
    init_simple_test("BFu31ll_BFu17ll_F");
    static STRUCT_IF_C BFu31ll_BFu17ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_F");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_F");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_F");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu17ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_F, BFu31ll_BFu17ll_F)
//============================================================================


struct  BFu31ll_BFu17ll_I  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  int v3;
};
//SIG(1 BFu31ll_BFu17ll_I) C1{ FL:31 FL:17 Fi}



static void Test_BFu31ll_BFu17ll_I()
{
  {
    init_simple_test("BFu31ll_BFu17ll_I");
    static STRUCT_IF_C BFu31ll_BFu17ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_I");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_I");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_I");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu17ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_I, BFu31ll_BFu17ll_I)
//============================================================================


struct  BFu31ll_BFu17ll_Ip  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  int *v3;
};
//SIG(1 BFu31ll_BFu17ll_Ip) C1{ FL:31 FL:17 Fp}



static void Test_BFu31ll_BFu17ll_Ip()
{
  {
    init_simple_test("BFu31ll_BFu17ll_Ip");
    static STRUCT_IF_C BFu31ll_BFu17ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_Ip");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_Ip");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_Ip");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu17ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_Ip, BFu31ll_BFu17ll_Ip)
//============================================================================


struct  BFu31ll_BFu17ll_L  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  __tsi64 v3;
};
//SIG(1 BFu31ll_BFu17ll_L) C1{ FL:31 FL:17 FL}



static void Test_BFu31ll_BFu17ll_L()
{
  {
    init_simple_test("BFu31ll_BFu17ll_L");
    static STRUCT_IF_C BFu31ll_BFu17ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu17ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_L");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_L");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_L");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu17ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_L, BFu31ll_BFu17ll_L)
//============================================================================


struct  BFu31ll_BFu17ll_S  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  short v3;
};
//SIG(1 BFu31ll_BFu17ll_S) C1{ FL:31 FL:17 Fs}



static void Test_BFu31ll_BFu17ll_S()
{
  {
    init_simple_test("BFu31ll_BFu17ll_S");
    static STRUCT_IF_C BFu31ll_BFu17ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_S");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_S");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_S");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu17ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_S, BFu31ll_BFu17ll_S)
//============================================================================


struct  BFu31ll_BFu17ll_Uc  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  unsigned char v3;
};
//SIG(1 BFu31ll_BFu17ll_Uc) C1{ FL:31 FL:17 Fc}



static void Test_BFu31ll_BFu17ll_Uc()
{
  {
    init_simple_test("BFu31ll_BFu17ll_Uc");
    static STRUCT_IF_C BFu31ll_BFu17ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_Uc");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_Uc");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_Uc");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu17ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_Uc, BFu31ll_BFu17ll_Uc)
//============================================================================


struct  BFu31ll_BFu17ll_Ui  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  unsigned int v3;
};
//SIG(1 BFu31ll_BFu17ll_Ui) C1{ FL:31 FL:17 Fi}



static void Test_BFu31ll_BFu17ll_Ui()
{
  {
    init_simple_test("BFu31ll_BFu17ll_Ui");
    static STRUCT_IF_C BFu31ll_BFu17ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_Ui");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_Ui");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_Ui");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu17ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_Ui, BFu31ll_BFu17ll_Ui)
//============================================================================


struct  BFu31ll_BFu17ll_Ul  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  __tsu64 v3;
};
//SIG(1 BFu31ll_BFu17ll_Ul) C1{ FL:31 FL:17 FL}



static void Test_BFu31ll_BFu17ll_Ul()
{
  {
    init_simple_test("BFu31ll_BFu17ll_Ul");
    static STRUCT_IF_C BFu31ll_BFu17ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu17ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_Ul");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_Ul");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_Ul");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu17ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_Ul, BFu31ll_BFu17ll_Ul)
//============================================================================


struct  BFu31ll_BFu17ll_Us  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  unsigned short v3;
};
//SIG(1 BFu31ll_BFu17ll_Us) C1{ FL:31 FL:17 Fs}



static void Test_BFu31ll_BFu17ll_Us()
{
  {
    init_simple_test("BFu31ll_BFu17ll_Us");
    static STRUCT_IF_C BFu31ll_BFu17ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_Us");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_Us");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_Us");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu17ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_Us, BFu31ll_BFu17ll_Us)
//============================================================================


struct  BFu31ll_BFu17ll_Vp  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  void *v3;
};
//SIG(1 BFu31ll_BFu17ll_Vp) C1{ FL:31 FL:17 Fp}



static void Test_BFu31ll_BFu17ll_Vp()
{
  {
    init_simple_test("BFu31ll_BFu17ll_Vp");
    static STRUCT_IF_C BFu31ll_BFu17ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu17ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_Vp");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_Vp");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_Vp");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu17ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu17ll_Vp, BFu31ll_BFu17ll_Vp)
//============================================================================


struct  BFu31ll_BFu1c  {
  __tsu64 v1:31;
  unsigned char v2:1;
};
//SIG(1 BFu31ll_BFu1c) C1{ FL:31 Fc:1}



static void Test_BFu31ll_BFu1c()
{
  {
    init_simple_test("BFu31ll_BFu1c");
    static STRUCT_IF_C BFu31ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu31ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c, BFu31ll_BFu1c)
//============================================================================


struct  BFu31ll_BFu1c_BFu15i  {
  __tsu64 v1:31;
  unsigned char v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu31ll_BFu1c_BFu15i) C1{ FL:31 Fc:1 Fi:15}



static void Test_BFu31ll_BFu1c_BFu15i()
{
  {
    init_simple_test("BFu31ll_BFu1c_BFu15i");
    static STRUCT_IF_C BFu31ll_BFu1c_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu31ll_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu1c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_BFu15i, BFu31ll_BFu1c_BFu15i)
//============================================================================


struct  BFu31ll_BFu1c_BFu15ll  {
  __tsu64 v1:31;
  unsigned char v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu31ll_BFu1c_BFu15ll) C1{ FL:31 Fc:1 FL:15}



static void Test_BFu31ll_BFu1c_BFu15ll()
{
  {
    init_simple_test("BFu31ll_BFu1c_BFu15ll");
    static STRUCT_IF_C BFu31ll_BFu1c_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu31ll_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu1c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_BFu15ll, BFu31ll_BFu1c_BFu15ll)
//============================================================================


struct  BFu31ll_BFu1c_BFu15s  {
  __tsu64 v1:31;
  unsigned char v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu31ll_BFu1c_BFu15s) C1{ FL:31 Fc:1 Fs:15}



static void Test_BFu31ll_BFu1c_BFu15s()
{
  {
    init_simple_test("BFu31ll_BFu1c_BFu15s");
    static STRUCT_IF_C BFu31ll_BFu1c_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu31ll_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu1c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_BFu15s, BFu31ll_BFu1c_BFu15s)
//============================================================================


struct  BFu31ll_BFu1c_BFu16i  {
  __tsu64 v1:31;
  unsigned char v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu31ll_BFu1c_BFu16i) C1{ FL:31 Fc:1 Fi:16}



static void Test_BFu31ll_BFu1c_BFu16i()
{
  {
    init_simple_test("BFu31ll_BFu1c_BFu16i");
    static STRUCT_IF_C BFu31ll_BFu1c_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu31ll_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu1c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_BFu16i, BFu31ll_BFu1c_BFu16i)
//============================================================================


struct  BFu31ll_BFu1c_BFu16ll  {
  __tsu64 v1:31;
  unsigned char v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu31ll_BFu1c_BFu16ll) C1{ FL:31 Fc:1 FL:16}



static void Test_BFu31ll_BFu1c_BFu16ll()
{
  {
    init_simple_test("BFu31ll_BFu1c_BFu16ll");
    static STRUCT_IF_C BFu31ll_BFu1c_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu31ll_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu1c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_BFu16ll, BFu31ll_BFu1c_BFu16ll)
//============================================================================


struct  BFu31ll_BFu1c_BFu16s  {
  __tsu64 v1:31;
  unsigned char v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu31ll_BFu1c_BFu16s) C1{ FL:31 Fc:1 Fs:16}



static void Test_BFu31ll_BFu1c_BFu16s()
{
  {
    init_simple_test("BFu31ll_BFu1c_BFu16s");
    static STRUCT_IF_C BFu31ll_BFu1c_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu31ll_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu1c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_BFu16s, BFu31ll_BFu1c_BFu16s)
//============================================================================


struct  BFu31ll_BFu1c_BFu17i  {
  __tsu64 v1:31;
  unsigned char v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu31ll_BFu1c_BFu17i) C1{ FL:31 Fc:1 Fi:17}



static void Test_BFu31ll_BFu1c_BFu17i()
{
  {
    init_simple_test("BFu31ll_BFu1c_BFu17i");
    static STRUCT_IF_C BFu31ll_BFu1c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu31ll_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu1c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_BFu17i, BFu31ll_BFu1c_BFu17i)
//============================================================================


struct  BFu31ll_BFu1c_BFu17ll  {
  __tsu64 v1:31;
  unsigned char v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu31ll_BFu1c_BFu17ll) C1{ FL:31 Fc:1 FL:17}



static void Test_BFu31ll_BFu1c_BFu17ll()
{
  {
    init_simple_test("BFu31ll_BFu1c_BFu17ll");
    static STRUCT_IF_C BFu31ll_BFu1c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu31ll_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu1c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_BFu17ll, BFu31ll_BFu1c_BFu17ll)
//============================================================================


struct  BFu31ll_BFu1c_BFu1c  {
  __tsu64 v1:31;
  unsigned char v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu31ll_BFu1c_BFu1c) C1{ FL:31 Fc:1 Fc:1}



static void Test_BFu31ll_BFu1c_BFu1c()
{
  {
    init_simple_test("BFu31ll_BFu1c_BFu1c");
    static STRUCT_IF_C BFu31ll_BFu1c_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31ll_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_BFu1c, BFu31ll_BFu1c_BFu1c)
//============================================================================


struct  BFu31ll_BFu1c_BFu1i  {
  __tsu64 v1:31;
  unsigned char v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu31ll_BFu1c_BFu1i) C1{ FL:31 Fc:1 Fi:1}



static void Test_BFu31ll_BFu1c_BFu1i()
{
  {
    init_simple_test("BFu31ll_BFu1c_BFu1i");
    static STRUCT_IF_C BFu31ll_BFu1c_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31ll_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_BFu1i, BFu31ll_BFu1c_BFu1i)
//============================================================================


struct  BFu31ll_BFu1c_BFu1ll  {
  __tsu64 v1:31;
  unsigned char v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu31ll_BFu1c_BFu1ll) C1{ FL:31 Fc:1 FL:1}



static void Test_BFu31ll_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFu31ll_BFu1c_BFu1ll");
    static STRUCT_IF_C BFu31ll_BFu1c_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31ll_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_BFu1ll, BFu31ll_BFu1c_BFu1ll)
//============================================================================


struct  BFu31ll_BFu1c_BFu1s  {
  __tsu64 v1:31;
  unsigned char v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu31ll_BFu1c_BFu1s) C1{ FL:31 Fc:1 Fs:1}



static void Test_BFu31ll_BFu1c_BFu1s()
{
  {
    init_simple_test("BFu31ll_BFu1c_BFu1s");
    static STRUCT_IF_C BFu31ll_BFu1c_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31ll_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_BFu1s, BFu31ll_BFu1c_BFu1s)
//============================================================================


struct  BFu31ll_BFu1c_BFu31i  {
  __tsu64 v1:31;
  unsigned char v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu31ll_BFu1c_BFu31i) C1{ FL:31 Fc:1 Fi:31}



static void Test_BFu31ll_BFu1c_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFu1c_BFu31i");
    static STRUCT_IF_C BFu31ll_BFu1c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu31ll_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_BFu31i, BFu31ll_BFu1c_BFu31i)
//============================================================================


struct  BFu31ll_BFu1c_BFu31ll  {
  __tsu64 v1:31;
  unsigned char v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu31ll_BFu1c_BFu31ll) C1{ FL:31 Fc:1 FL:31}



static void Test_BFu31ll_BFu1c_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFu1c_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFu1c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu31ll_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_BFu31ll, BFu31ll_BFu1c_BFu31ll)
//============================================================================


struct  BFu31ll_BFu1c_BFu32i  {
  __tsu64 v1:31;
  unsigned char v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu31ll_BFu1c_BFu32i) C1{ FL:31 Fc:1 Fi:32}



static void Test_BFu31ll_BFu1c_BFu32i()
{
  {
    init_simple_test("BFu31ll_BFu1c_BFu32i");
    static STRUCT_IF_C BFu31ll_BFu1c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu31ll_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu1c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_BFu32i, BFu31ll_BFu1c_BFu32i)
//============================================================================


struct  BFu31ll_BFu1c_BFu32ll  {
  __tsu64 v1:31;
  unsigned char v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu31ll_BFu1c_BFu32ll) C1{ FL:31 Fc:1 FL:32}



static void Test_BFu31ll_BFu1c_BFu32ll()
{
  {
    init_simple_test("BFu31ll_BFu1c_BFu32ll");
    static STRUCT_IF_C BFu31ll_BFu1c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu31ll_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu1c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_BFu32ll, BFu31ll_BFu1c_BFu32ll)
//============================================================================


struct  BFu31ll_BFu1c_BFu33  {
  __tsu64 v1:31;
  unsigned char v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu31ll_BFu1c_BFu33) C1{ FL:31 Fc:1 FL:33}



static void Test_BFu31ll_BFu1c_BFu33()
{
  {
    init_simple_test("BFu31ll_BFu1c_BFu33");
    static STRUCT_IF_C BFu31ll_BFu1c_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu1c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu31ll_BFu1c_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu31ll_BFu1c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_BFu33, BFu31ll_BFu1c_BFu33)
//============================================================================


struct  BFu31ll_BFu1c_BFu7c  {
  __tsu64 v1:31;
  unsigned char v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu31ll_BFu1c_BFu7c) C1{ FL:31 Fc:1 Fc:7}



static void Test_BFu31ll_BFu1c_BFu7c()
{
  {
    init_simple_test("BFu31ll_BFu1c_BFu7c");
    static STRUCT_IF_C BFu31ll_BFu1c_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31ll_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu1c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_BFu7c, BFu31ll_BFu1c_BFu7c)
//============================================================================


struct  BFu31ll_BFu1c_BFu7i  {
  __tsu64 v1:31;
  unsigned char v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu31ll_BFu1c_BFu7i) C1{ FL:31 Fc:1 Fi:7}



static void Test_BFu31ll_BFu1c_BFu7i()
{
  {
    init_simple_test("BFu31ll_BFu1c_BFu7i");
    static STRUCT_IF_C BFu31ll_BFu1c_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31ll_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu1c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_BFu7i, BFu31ll_BFu1c_BFu7i)
//============================================================================


struct  BFu31ll_BFu1c_BFu7ll  {
  __tsu64 v1:31;
  unsigned char v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu31ll_BFu1c_BFu7ll) C1{ FL:31 Fc:1 FL:7}



static void Test_BFu31ll_BFu1c_BFu7ll()
{
  {
    init_simple_test("BFu31ll_BFu1c_BFu7ll");
    static STRUCT_IF_C BFu31ll_BFu1c_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31ll_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu1c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_BFu7ll, BFu31ll_BFu1c_BFu7ll)
//============================================================================


struct  BFu31ll_BFu1c_BFu7s  {
  __tsu64 v1:31;
  unsigned char v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu31ll_BFu1c_BFu7s) C1{ FL:31 Fc:1 Fs:7}



static void Test_BFu31ll_BFu1c_BFu7s()
{
  {
    init_simple_test("BFu31ll_BFu1c_BFu7s");
    static STRUCT_IF_C BFu31ll_BFu1c_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31ll_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu1c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_BFu7s, BFu31ll_BFu1c_BFu7s)
//============================================================================


struct  BFu31ll_BFu1c_BFu8c  {
  __tsu64 v1:31;
  unsigned char v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu31ll_BFu1c_BFu8c) C1{ FL:31 Fc:1 Fc:8}



static void Test_BFu31ll_BFu1c_BFu8c()
{
  {
    init_simple_test("BFu31ll_BFu1c_BFu8c");
    static STRUCT_IF_C BFu31ll_BFu1c_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31ll_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu1c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_BFu8c, BFu31ll_BFu1c_BFu8c)
//============================================================================


struct  BFu31ll_BFu1c_BFu8i  {
  __tsu64 v1:31;
  unsigned char v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu31ll_BFu1c_BFu8i) C1{ FL:31 Fc:1 Fi:8}



static void Test_BFu31ll_BFu1c_BFu8i()
{
  {
    init_simple_test("BFu31ll_BFu1c_BFu8i");
    static STRUCT_IF_C BFu31ll_BFu1c_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31ll_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu1c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_BFu8i, BFu31ll_BFu1c_BFu8i)
//============================================================================


struct  BFu31ll_BFu1c_BFu8ll  {
  __tsu64 v1:31;
  unsigned char v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu31ll_BFu1c_BFu8ll) C1{ FL:31 Fc:1 FL:8}



static void Test_BFu31ll_BFu1c_BFu8ll()
{
  {
    init_simple_test("BFu31ll_BFu1c_BFu8ll");
    static STRUCT_IF_C BFu31ll_BFu1c_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31ll_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu1c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_BFu8ll, BFu31ll_BFu1c_BFu8ll)
//============================================================================


struct  BFu31ll_BFu1c_BFu8s  {
  __tsu64 v1:31;
  unsigned char v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu31ll_BFu1c_BFu8s) C1{ FL:31 Fc:1 Fs:8}



static void Test_BFu31ll_BFu1c_BFu8s()
{
  {
    init_simple_test("BFu31ll_BFu1c_BFu8s");
    static STRUCT_IF_C BFu31ll_BFu1c_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31ll_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu1c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_BFu8s, BFu31ll_BFu1c_BFu8s)
//============================================================================


struct  BFu31ll_BFu1c_BFu9i  {
  __tsu64 v1:31;
  unsigned char v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu31ll_BFu1c_BFu9i) C1{ FL:31 Fc:1 Fi:9}



static void Test_BFu31ll_BFu1c_BFu9i()
{
  {
    init_simple_test("BFu31ll_BFu1c_BFu9i");
    static STRUCT_IF_C BFu31ll_BFu1c_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu31ll_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu1c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_BFu9i, BFu31ll_BFu1c_BFu9i)
//============================================================================


struct  BFu31ll_BFu1c_BFu9ll  {
  __tsu64 v1:31;
  unsigned char v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu31ll_BFu1c_BFu9ll) C1{ FL:31 Fc:1 FL:9}



static void Test_BFu31ll_BFu1c_BFu9ll()
{
  {
    init_simple_test("BFu31ll_BFu1c_BFu9ll");
    static STRUCT_IF_C BFu31ll_BFu1c_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu31ll_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu1c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_BFu9ll, BFu31ll_BFu1c_BFu9ll)
//============================================================================


struct  BFu31ll_BFu1c_BFu9s  {
  __tsu64 v1:31;
  unsigned char v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu31ll_BFu1c_BFu9s) C1{ FL:31 Fc:1 Fs:9}



static void Test_BFu31ll_BFu1c_BFu9s()
{
  {
    init_simple_test("BFu31ll_BFu1c_BFu9s");
    static STRUCT_IF_C BFu31ll_BFu1c_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu31ll_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu1c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_BFu9s, BFu31ll_BFu1c_BFu9s)
//============================================================================


struct  BFu31ll_BFu1c_C  {
  __tsu64 v1:31;
  unsigned char v2:1;
  char v3;
};
//SIG(1 BFu31ll_BFu1c_C) C1{ FL:31 Fc:1 Fc}



static void Test_BFu31ll_BFu1c_C()
{
  {
    init_simple_test("BFu31ll_BFu1c_C");
    static STRUCT_IF_C BFu31ll_BFu1c_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_C");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_C");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_C, BFu31ll_BFu1c_C)
//============================================================================


struct  BFu31ll_BFu1c_D  {
  __tsu64 v1:31;
  unsigned char v2:1;
  double v3;
};
//SIG(1 BFu31ll_BFu1c_D) C1{ FL:31 Fc:1 FL}



static void Test_BFu31ll_BFu1c_D()
{
  {
    init_simple_test("BFu31ll_BFu1c_D");
    static STRUCT_IF_C BFu31ll_BFu1c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu1c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_D");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31ll_BFu1c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_D, BFu31ll_BFu1c_D)
//============================================================================


struct  BFu31ll_BFu1c_F  {
  __tsu64 v1:31;
  unsigned char v2:1;
  float v3;
};
//SIG(1 BFu31ll_BFu1c_F) C1{ FL:31 Fc:1 Fi}



static void Test_BFu31ll_BFu1c_F()
{
  {
    init_simple_test("BFu31ll_BFu1c_F");
    static STRUCT_IF_C BFu31ll_BFu1c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_F");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_F");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_F, BFu31ll_BFu1c_F)
//============================================================================


struct  BFu31ll_BFu1c_I  {
  __tsu64 v1:31;
  unsigned char v2:1;
  int v3;
};
//SIG(1 BFu31ll_BFu1c_I) C1{ FL:31 Fc:1 Fi}



static void Test_BFu31ll_BFu1c_I()
{
  {
    init_simple_test("BFu31ll_BFu1c_I");
    static STRUCT_IF_C BFu31ll_BFu1c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_I");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_I");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_I, BFu31ll_BFu1c_I)
//============================================================================


struct  BFu31ll_BFu1c_Ip  {
  __tsu64 v1:31;
  unsigned char v2:1;
  int *v3;
};
//SIG(1 BFu31ll_BFu1c_Ip) C1{ FL:31 Fc:1 Fp}



static void Test_BFu31ll_BFu1c_Ip()
{
  {
    init_simple_test("BFu31ll_BFu1c_Ip");
    static STRUCT_IF_C BFu31ll_BFu1c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu31ll_BFu1c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_Ip");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31ll_BFu1c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_Ip, BFu31ll_BFu1c_Ip)
//============================================================================


struct  BFu31ll_BFu1c_L  {
  __tsu64 v1:31;
  unsigned char v2:1;
  __tsi64 v3;
};
//SIG(1 BFu31ll_BFu1c_L) C1{ FL:31 Fc:1 FL}



static void Test_BFu31ll_BFu1c_L()
{
  {
    init_simple_test("BFu31ll_BFu1c_L");
    static STRUCT_IF_C BFu31ll_BFu1c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu1c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_L");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31ll_BFu1c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_L, BFu31ll_BFu1c_L)
//============================================================================


struct  BFu31ll_BFu1c_S  {
  __tsu64 v1:31;
  unsigned char v2:1;
  short v3;
};
//SIG(1 BFu31ll_BFu1c_S) C1{ FL:31 Fc:1 Fs}



static void Test_BFu31ll_BFu1c_S()
{
  {
    init_simple_test("BFu31ll_BFu1c_S");
    static STRUCT_IF_C BFu31ll_BFu1c_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_S");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_S");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_S, BFu31ll_BFu1c_S)
//============================================================================


struct  BFu31ll_BFu1c_Uc  {
  __tsu64 v1:31;
  unsigned char v2:1;
  unsigned char v3;
};
//SIG(1 BFu31ll_BFu1c_Uc) C1{ FL:31 Fc:1 Fc}



static void Test_BFu31ll_BFu1c_Uc()
{
  {
    init_simple_test("BFu31ll_BFu1c_Uc");
    static STRUCT_IF_C BFu31ll_BFu1c_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_Uc");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_Uc");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_Uc, BFu31ll_BFu1c_Uc)
//============================================================================


struct  BFu31ll_BFu1c_Ui  {
  __tsu64 v1:31;
  unsigned char v2:1;
  unsigned int v3;
};
//SIG(1 BFu31ll_BFu1c_Ui) C1{ FL:31 Fc:1 Fi}



static void Test_BFu31ll_BFu1c_Ui()
{
  {
    init_simple_test("BFu31ll_BFu1c_Ui");
    static STRUCT_IF_C BFu31ll_BFu1c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_Ui");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_Ui");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_Ui, BFu31ll_BFu1c_Ui)
//============================================================================


struct  BFu31ll_BFu1c_Ul  {
  __tsu64 v1:31;
  unsigned char v2:1;
  __tsu64 v3;
};
//SIG(1 BFu31ll_BFu1c_Ul) C1{ FL:31 Fc:1 FL}



static void Test_BFu31ll_BFu1c_Ul()
{
  {
    init_simple_test("BFu31ll_BFu1c_Ul");
    static STRUCT_IF_C BFu31ll_BFu1c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu1c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_Ul");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31ll_BFu1c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_Ul, BFu31ll_BFu1c_Ul)
//============================================================================


struct  BFu31ll_BFu1c_Us  {
  __tsu64 v1:31;
  unsigned char v2:1;
  unsigned short v3;
};
//SIG(1 BFu31ll_BFu1c_Us) C1{ FL:31 Fc:1 Fs}



static void Test_BFu31ll_BFu1c_Us()
{
  {
    init_simple_test("BFu31ll_BFu1c_Us");
    static STRUCT_IF_C BFu31ll_BFu1c_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_Us");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_Us");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_Us, BFu31ll_BFu1c_Us)
//============================================================================


struct  BFu31ll_BFu1c_Vp  {
  __tsu64 v1:31;
  unsigned char v2:1;
  void *v3;
};
//SIG(1 BFu31ll_BFu1c_Vp) C1{ FL:31 Fc:1 Fp}



static void Test_BFu31ll_BFu1c_Vp()
{
  {
    init_simple_test("BFu31ll_BFu1c_Vp");
    static STRUCT_IF_C BFu31ll_BFu1c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu31ll_BFu1c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_Vp");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31ll_BFu1c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1c_Vp, BFu31ll_BFu1c_Vp)
//============================================================================


struct  BFu31ll_BFu1i  {
  __tsu64 v1:31;
  unsigned int v2:1;
};
//SIG(1 BFu31ll_BFu1i) C1{ FL:31 Fi:1}



static void Test_BFu31ll_BFu1i()
{
  {
    init_simple_test("BFu31ll_BFu1i");
    static STRUCT_IF_C BFu31ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu31ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i, BFu31ll_BFu1i)
//============================================================================


struct  BFu31ll_BFu1i_BFu15i  {
  __tsu64 v1:31;
  unsigned int v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu31ll_BFu1i_BFu15i) C1{ FL:31 Fi:1 Fi:15}



static void Test_BFu31ll_BFu1i_BFu15i()
{
  {
    init_simple_test("BFu31ll_BFu1i_BFu15i");
    static STRUCT_IF_C BFu31ll_BFu1i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu31ll_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu1i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_BFu15i, BFu31ll_BFu1i_BFu15i)
//============================================================================


struct  BFu31ll_BFu1i_BFu15ll  {
  __tsu64 v1:31;
  unsigned int v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu31ll_BFu1i_BFu15ll) C1{ FL:31 Fi:1 FL:15}



static void Test_BFu31ll_BFu1i_BFu15ll()
{
  {
    init_simple_test("BFu31ll_BFu1i_BFu15ll");
    static STRUCT_IF_C BFu31ll_BFu1i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu31ll_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu1i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_BFu15ll, BFu31ll_BFu1i_BFu15ll)
//============================================================================


struct  BFu31ll_BFu1i_BFu15s  {
  __tsu64 v1:31;
  unsigned int v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu31ll_BFu1i_BFu15s) C1{ FL:31 Fi:1 Fs:15}



static void Test_BFu31ll_BFu1i_BFu15s()
{
  {
    init_simple_test("BFu31ll_BFu1i_BFu15s");
    static STRUCT_IF_C BFu31ll_BFu1i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu31ll_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu1i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_BFu15s, BFu31ll_BFu1i_BFu15s)
//============================================================================


struct  BFu31ll_BFu1i_BFu16i  {
  __tsu64 v1:31;
  unsigned int v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu31ll_BFu1i_BFu16i) C1{ FL:31 Fi:1 Fi:16}



static void Test_BFu31ll_BFu1i_BFu16i()
{
  {
    init_simple_test("BFu31ll_BFu1i_BFu16i");
    static STRUCT_IF_C BFu31ll_BFu1i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu31ll_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu1i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_BFu16i, BFu31ll_BFu1i_BFu16i)
//============================================================================


struct  BFu31ll_BFu1i_BFu16ll  {
  __tsu64 v1:31;
  unsigned int v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu31ll_BFu1i_BFu16ll) C1{ FL:31 Fi:1 FL:16}



static void Test_BFu31ll_BFu1i_BFu16ll()
{
  {
    init_simple_test("BFu31ll_BFu1i_BFu16ll");
    static STRUCT_IF_C BFu31ll_BFu1i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu31ll_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu1i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_BFu16ll, BFu31ll_BFu1i_BFu16ll)
//============================================================================


struct  BFu31ll_BFu1i_BFu16s  {
  __tsu64 v1:31;
  unsigned int v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu31ll_BFu1i_BFu16s) C1{ FL:31 Fi:1 Fs:16}



static void Test_BFu31ll_BFu1i_BFu16s()
{
  {
    init_simple_test("BFu31ll_BFu1i_BFu16s");
    static STRUCT_IF_C BFu31ll_BFu1i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu31ll_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu1i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_BFu16s, BFu31ll_BFu1i_BFu16s)
//============================================================================


struct  BFu31ll_BFu1i_BFu17i  {
  __tsu64 v1:31;
  unsigned int v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu31ll_BFu1i_BFu17i) C1{ FL:31 Fi:1 Fi:17}



static void Test_BFu31ll_BFu1i_BFu17i()
{
  {
    init_simple_test("BFu31ll_BFu1i_BFu17i");
    static STRUCT_IF_C BFu31ll_BFu1i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu31ll_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu1i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_BFu17i, BFu31ll_BFu1i_BFu17i)
//============================================================================


struct  BFu31ll_BFu1i_BFu17ll  {
  __tsu64 v1:31;
  unsigned int v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu31ll_BFu1i_BFu17ll) C1{ FL:31 Fi:1 FL:17}



static void Test_BFu31ll_BFu1i_BFu17ll()
{
  {
    init_simple_test("BFu31ll_BFu1i_BFu17ll");
    static STRUCT_IF_C BFu31ll_BFu1i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu31ll_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu1i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_BFu17ll, BFu31ll_BFu1i_BFu17ll)
//============================================================================


struct  BFu31ll_BFu1i_BFu1c  {
  __tsu64 v1:31;
  unsigned int v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu31ll_BFu1i_BFu1c) C1{ FL:31 Fi:1 Fc:1}



static void Test_BFu31ll_BFu1i_BFu1c()
{
  {
    init_simple_test("BFu31ll_BFu1i_BFu1c");
    static STRUCT_IF_C BFu31ll_BFu1i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31ll_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_BFu1c, BFu31ll_BFu1i_BFu1c)
//============================================================================


struct  BFu31ll_BFu1i_BFu1i  {
  __tsu64 v1:31;
  unsigned int v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu31ll_BFu1i_BFu1i) C1{ FL:31 Fi:1 Fi:1}



static void Test_BFu31ll_BFu1i_BFu1i()
{
  {
    init_simple_test("BFu31ll_BFu1i_BFu1i");
    static STRUCT_IF_C BFu31ll_BFu1i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31ll_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_BFu1i, BFu31ll_BFu1i_BFu1i)
//============================================================================


struct  BFu31ll_BFu1i_BFu1ll  {
  __tsu64 v1:31;
  unsigned int v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu31ll_BFu1i_BFu1ll) C1{ FL:31 Fi:1 FL:1}



static void Test_BFu31ll_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFu31ll_BFu1i_BFu1ll");
    static STRUCT_IF_C BFu31ll_BFu1i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31ll_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_BFu1ll, BFu31ll_BFu1i_BFu1ll)
//============================================================================


struct  BFu31ll_BFu1i_BFu1s  {
  __tsu64 v1:31;
  unsigned int v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu31ll_BFu1i_BFu1s) C1{ FL:31 Fi:1 Fs:1}



static void Test_BFu31ll_BFu1i_BFu1s()
{
  {
    init_simple_test("BFu31ll_BFu1i_BFu1s");
    static STRUCT_IF_C BFu31ll_BFu1i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31ll_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_BFu1s, BFu31ll_BFu1i_BFu1s)
//============================================================================


struct  BFu31ll_BFu1i_BFu31i  {
  __tsu64 v1:31;
  unsigned int v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu31ll_BFu1i_BFu31i) C1{ FL:31 Fi:1 Fi:31}



static void Test_BFu31ll_BFu1i_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFu1i_BFu31i");
    static STRUCT_IF_C BFu31ll_BFu1i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu31ll_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_BFu31i, BFu31ll_BFu1i_BFu31i)
//============================================================================


struct  BFu31ll_BFu1i_BFu31ll  {
  __tsu64 v1:31;
  unsigned int v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu31ll_BFu1i_BFu31ll) C1{ FL:31 Fi:1 FL:31}



static void Test_BFu31ll_BFu1i_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFu1i_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFu1i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu31ll_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_BFu31ll, BFu31ll_BFu1i_BFu31ll)
//============================================================================


struct  BFu31ll_BFu1i_BFu32i  {
  __tsu64 v1:31;
  unsigned int v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu31ll_BFu1i_BFu32i) C1{ FL:31 Fi:1 Fi:32}



static void Test_BFu31ll_BFu1i_BFu32i()
{
  {
    init_simple_test("BFu31ll_BFu1i_BFu32i");
    static STRUCT_IF_C BFu31ll_BFu1i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu31ll_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu1i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_BFu32i, BFu31ll_BFu1i_BFu32i)
//============================================================================


struct  BFu31ll_BFu1i_BFu32ll  {
  __tsu64 v1:31;
  unsigned int v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu31ll_BFu1i_BFu32ll) C1{ FL:31 Fi:1 FL:32}



static void Test_BFu31ll_BFu1i_BFu32ll()
{
  {
    init_simple_test("BFu31ll_BFu1i_BFu32ll");
    static STRUCT_IF_C BFu31ll_BFu1i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu31ll_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu1i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_BFu32ll, BFu31ll_BFu1i_BFu32ll)
//============================================================================


struct  BFu31ll_BFu1i_BFu33  {
  __tsu64 v1:31;
  unsigned int v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu31ll_BFu1i_BFu33) C1{ FL:31 Fi:1 FL:33}



static void Test_BFu31ll_BFu1i_BFu33()
{
  {
    init_simple_test("BFu31ll_BFu1i_BFu33");
    static STRUCT_IF_C BFu31ll_BFu1i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu1i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu31ll_BFu1i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu31ll_BFu1i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_BFu33, BFu31ll_BFu1i_BFu33)
//============================================================================


struct  BFu31ll_BFu1i_BFu7c  {
  __tsu64 v1:31;
  unsigned int v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu31ll_BFu1i_BFu7c) C1{ FL:31 Fi:1 Fc:7}



static void Test_BFu31ll_BFu1i_BFu7c()
{
  {
    init_simple_test("BFu31ll_BFu1i_BFu7c");
    static STRUCT_IF_C BFu31ll_BFu1i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31ll_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu1i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_BFu7c, BFu31ll_BFu1i_BFu7c)
//============================================================================


struct  BFu31ll_BFu1i_BFu7i  {
  __tsu64 v1:31;
  unsigned int v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu31ll_BFu1i_BFu7i) C1{ FL:31 Fi:1 Fi:7}



static void Test_BFu31ll_BFu1i_BFu7i()
{
  {
    init_simple_test("BFu31ll_BFu1i_BFu7i");
    static STRUCT_IF_C BFu31ll_BFu1i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31ll_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu1i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_BFu7i, BFu31ll_BFu1i_BFu7i)
//============================================================================


struct  BFu31ll_BFu1i_BFu7ll  {
  __tsu64 v1:31;
  unsigned int v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu31ll_BFu1i_BFu7ll) C1{ FL:31 Fi:1 FL:7}



static void Test_BFu31ll_BFu1i_BFu7ll()
{
  {
    init_simple_test("BFu31ll_BFu1i_BFu7ll");
    static STRUCT_IF_C BFu31ll_BFu1i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31ll_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu1i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_BFu7ll, BFu31ll_BFu1i_BFu7ll)
//============================================================================


struct  BFu31ll_BFu1i_BFu7s  {
  __tsu64 v1:31;
  unsigned int v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu31ll_BFu1i_BFu7s) C1{ FL:31 Fi:1 Fs:7}



static void Test_BFu31ll_BFu1i_BFu7s()
{
  {
    init_simple_test("BFu31ll_BFu1i_BFu7s");
    static STRUCT_IF_C BFu31ll_BFu1i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31ll_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu1i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_BFu7s, BFu31ll_BFu1i_BFu7s)
//============================================================================


struct  BFu31ll_BFu1i_BFu8c  {
  __tsu64 v1:31;
  unsigned int v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu31ll_BFu1i_BFu8c) C1{ FL:31 Fi:1 Fc:8}



static void Test_BFu31ll_BFu1i_BFu8c()
{
  {
    init_simple_test("BFu31ll_BFu1i_BFu8c");
    static STRUCT_IF_C BFu31ll_BFu1i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31ll_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu1i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_BFu8c, BFu31ll_BFu1i_BFu8c)
//============================================================================


struct  BFu31ll_BFu1i_BFu8i  {
  __tsu64 v1:31;
  unsigned int v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu31ll_BFu1i_BFu8i) C1{ FL:31 Fi:1 Fi:8}



static void Test_BFu31ll_BFu1i_BFu8i()
{
  {
    init_simple_test("BFu31ll_BFu1i_BFu8i");
    static STRUCT_IF_C BFu31ll_BFu1i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31ll_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu1i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_BFu8i, BFu31ll_BFu1i_BFu8i)
//============================================================================


struct  BFu31ll_BFu1i_BFu8ll  {
  __tsu64 v1:31;
  unsigned int v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu31ll_BFu1i_BFu8ll) C1{ FL:31 Fi:1 FL:8}



static void Test_BFu31ll_BFu1i_BFu8ll()
{
  {
    init_simple_test("BFu31ll_BFu1i_BFu8ll");
    static STRUCT_IF_C BFu31ll_BFu1i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31ll_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu1i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_BFu8ll, BFu31ll_BFu1i_BFu8ll)
//============================================================================


struct  BFu31ll_BFu1i_BFu8s  {
  __tsu64 v1:31;
  unsigned int v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu31ll_BFu1i_BFu8s) C1{ FL:31 Fi:1 Fs:8}



static void Test_BFu31ll_BFu1i_BFu8s()
{
  {
    init_simple_test("BFu31ll_BFu1i_BFu8s");
    static STRUCT_IF_C BFu31ll_BFu1i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31ll_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu1i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_BFu8s, BFu31ll_BFu1i_BFu8s)
//============================================================================


struct  BFu31ll_BFu1i_BFu9i  {
  __tsu64 v1:31;
  unsigned int v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu31ll_BFu1i_BFu9i) C1{ FL:31 Fi:1 Fi:9}



static void Test_BFu31ll_BFu1i_BFu9i()
{
  {
    init_simple_test("BFu31ll_BFu1i_BFu9i");
    static STRUCT_IF_C BFu31ll_BFu1i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu31ll_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu1i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_BFu9i, BFu31ll_BFu1i_BFu9i)
//============================================================================


struct  BFu31ll_BFu1i_BFu9ll  {
  __tsu64 v1:31;
  unsigned int v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu31ll_BFu1i_BFu9ll) C1{ FL:31 Fi:1 FL:9}



static void Test_BFu31ll_BFu1i_BFu9ll()
{
  {
    init_simple_test("BFu31ll_BFu1i_BFu9ll");
    static STRUCT_IF_C BFu31ll_BFu1i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu31ll_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu1i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_BFu9ll, BFu31ll_BFu1i_BFu9ll)
//============================================================================


struct  BFu31ll_BFu1i_BFu9s  {
  __tsu64 v1:31;
  unsigned int v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu31ll_BFu1i_BFu9s) C1{ FL:31 Fi:1 Fs:9}



static void Test_BFu31ll_BFu1i_BFu9s()
{
  {
    init_simple_test("BFu31ll_BFu1i_BFu9s");
    static STRUCT_IF_C BFu31ll_BFu1i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu31ll_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu1i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_BFu9s, BFu31ll_BFu1i_BFu9s)
//============================================================================


struct  BFu31ll_BFu1i_C  {
  __tsu64 v1:31;
  unsigned int v2:1;
  char v3;
};
//SIG(1 BFu31ll_BFu1i_C) C1{ FL:31 Fi:1 Fc}



static void Test_BFu31ll_BFu1i_C()
{
  {
    init_simple_test("BFu31ll_BFu1i_C");
    static STRUCT_IF_C BFu31ll_BFu1i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_C");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_C");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_C, BFu31ll_BFu1i_C)
//============================================================================


struct  BFu31ll_BFu1i_D  {
  __tsu64 v1:31;
  unsigned int v2:1;
  double v3;
};
//SIG(1 BFu31ll_BFu1i_D) C1{ FL:31 Fi:1 FL}



static void Test_BFu31ll_BFu1i_D()
{
  {
    init_simple_test("BFu31ll_BFu1i_D");
    static STRUCT_IF_C BFu31ll_BFu1i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu1i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_D");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31ll_BFu1i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_D, BFu31ll_BFu1i_D)
//============================================================================


struct  BFu31ll_BFu1i_F  {
  __tsu64 v1:31;
  unsigned int v2:1;
  float v3;
};
//SIG(1 BFu31ll_BFu1i_F) C1{ FL:31 Fi:1 Fi}



static void Test_BFu31ll_BFu1i_F()
{
  {
    init_simple_test("BFu31ll_BFu1i_F");
    static STRUCT_IF_C BFu31ll_BFu1i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_F");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_F");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_F, BFu31ll_BFu1i_F)
//============================================================================


struct  BFu31ll_BFu1i_I  {
  __tsu64 v1:31;
  unsigned int v2:1;
  int v3;
};
//SIG(1 BFu31ll_BFu1i_I) C1{ FL:31 Fi:1 Fi}



static void Test_BFu31ll_BFu1i_I()
{
  {
    init_simple_test("BFu31ll_BFu1i_I");
    static STRUCT_IF_C BFu31ll_BFu1i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_I");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_I");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_I, BFu31ll_BFu1i_I)
//============================================================================


struct  BFu31ll_BFu1i_Ip  {
  __tsu64 v1:31;
  unsigned int v2:1;
  int *v3;
};
//SIG(1 BFu31ll_BFu1i_Ip) C1{ FL:31 Fi:1 Fp}



static void Test_BFu31ll_BFu1i_Ip()
{
  {
    init_simple_test("BFu31ll_BFu1i_Ip");
    static STRUCT_IF_C BFu31ll_BFu1i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu31ll_BFu1i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_Ip");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31ll_BFu1i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_Ip, BFu31ll_BFu1i_Ip)
//============================================================================


struct  BFu31ll_BFu1i_L  {
  __tsu64 v1:31;
  unsigned int v2:1;
  __tsi64 v3;
};
//SIG(1 BFu31ll_BFu1i_L) C1{ FL:31 Fi:1 FL}



static void Test_BFu31ll_BFu1i_L()
{
  {
    init_simple_test("BFu31ll_BFu1i_L");
    static STRUCT_IF_C BFu31ll_BFu1i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu1i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_L");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31ll_BFu1i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_L, BFu31ll_BFu1i_L)
//============================================================================


struct  BFu31ll_BFu1i_S  {
  __tsu64 v1:31;
  unsigned int v2:1;
  short v3;
};
//SIG(1 BFu31ll_BFu1i_S) C1{ FL:31 Fi:1 Fs}



static void Test_BFu31ll_BFu1i_S()
{
  {
    init_simple_test("BFu31ll_BFu1i_S");
    static STRUCT_IF_C BFu31ll_BFu1i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_S");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_S");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_S, BFu31ll_BFu1i_S)
//============================================================================


struct  BFu31ll_BFu1i_Uc  {
  __tsu64 v1:31;
  unsigned int v2:1;
  unsigned char v3;
};
//SIG(1 BFu31ll_BFu1i_Uc) C1{ FL:31 Fi:1 Fc}



static void Test_BFu31ll_BFu1i_Uc()
{
  {
    init_simple_test("BFu31ll_BFu1i_Uc");
    static STRUCT_IF_C BFu31ll_BFu1i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_Uc");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_Uc");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_Uc, BFu31ll_BFu1i_Uc)
//============================================================================


struct  BFu31ll_BFu1i_Ui  {
  __tsu64 v1:31;
  unsigned int v2:1;
  unsigned int v3;
};
//SIG(1 BFu31ll_BFu1i_Ui) C1{ FL:31 Fi:1 Fi}



static void Test_BFu31ll_BFu1i_Ui()
{
  {
    init_simple_test("BFu31ll_BFu1i_Ui");
    static STRUCT_IF_C BFu31ll_BFu1i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_Ui");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_Ui");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_Ui, BFu31ll_BFu1i_Ui)
//============================================================================


struct  BFu31ll_BFu1i_Ul  {
  __tsu64 v1:31;
  unsigned int v2:1;
  __tsu64 v3;
};
//SIG(1 BFu31ll_BFu1i_Ul) C1{ FL:31 Fi:1 FL}



static void Test_BFu31ll_BFu1i_Ul()
{
  {
    init_simple_test("BFu31ll_BFu1i_Ul");
    static STRUCT_IF_C BFu31ll_BFu1i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu1i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_Ul");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31ll_BFu1i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_Ul, BFu31ll_BFu1i_Ul)
//============================================================================


struct  BFu31ll_BFu1i_Us  {
  __tsu64 v1:31;
  unsigned int v2:1;
  unsigned short v3;
};
//SIG(1 BFu31ll_BFu1i_Us) C1{ FL:31 Fi:1 Fs}



static void Test_BFu31ll_BFu1i_Us()
{
  {
    init_simple_test("BFu31ll_BFu1i_Us");
    static STRUCT_IF_C BFu31ll_BFu1i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_Us");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_Us");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_Us, BFu31ll_BFu1i_Us)
//============================================================================


struct  BFu31ll_BFu1i_Vp  {
  __tsu64 v1:31;
  unsigned int v2:1;
  void *v3;
};
//SIG(1 BFu31ll_BFu1i_Vp) C1{ FL:31 Fi:1 Fp}



static void Test_BFu31ll_BFu1i_Vp()
{
  {
    init_simple_test("BFu31ll_BFu1i_Vp");
    static STRUCT_IF_C BFu31ll_BFu1i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu31ll_BFu1i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_Vp");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31ll_BFu1i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1i_Vp, BFu31ll_BFu1i_Vp)
//============================================================================


struct  BFu31ll_BFu1ll  {
  __tsu64 v1:31;
  __tsu64 v2:1;
};
//SIG(1 BFu31ll_BFu1ll) C1{ FL:31 FL:1}



static void Test_BFu31ll_BFu1ll()
{
  {
    init_simple_test("BFu31ll_BFu1ll");
    static STRUCT_IF_C BFu31ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu31ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll, BFu31ll_BFu1ll)
//============================================================================


struct  BFu31ll_BFu1ll_BFu15i  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu31ll_BFu1ll_BFu15i) C1{ FL:31 FL:1 Fi:15}



static void Test_BFu31ll_BFu1ll_BFu15i()
{
  {
    init_simple_test("BFu31ll_BFu1ll_BFu15i");
    static STRUCT_IF_C BFu31ll_BFu1ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu31ll_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu1ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_BFu15i, BFu31ll_BFu1ll_BFu15i)
//============================================================================


struct  BFu31ll_BFu1ll_BFu15ll  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu31ll_BFu1ll_BFu15ll) C1{ FL:31 FL:1 FL:15}



static void Test_BFu31ll_BFu1ll_BFu15ll()
{
  {
    init_simple_test("BFu31ll_BFu1ll_BFu15ll");
    static STRUCT_IF_C BFu31ll_BFu1ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu31ll_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu1ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_BFu15ll, BFu31ll_BFu1ll_BFu15ll)
//============================================================================


struct  BFu31ll_BFu1ll_BFu15s  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu31ll_BFu1ll_BFu15s) C1{ FL:31 FL:1 Fs:15}



static void Test_BFu31ll_BFu1ll_BFu15s()
{
  {
    init_simple_test("BFu31ll_BFu1ll_BFu15s");
    static STRUCT_IF_C BFu31ll_BFu1ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu31ll_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu1ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_BFu15s, BFu31ll_BFu1ll_BFu15s)
//============================================================================


struct  BFu31ll_BFu1ll_BFu16i  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu31ll_BFu1ll_BFu16i) C1{ FL:31 FL:1 Fi:16}



static void Test_BFu31ll_BFu1ll_BFu16i()
{
  {
    init_simple_test("BFu31ll_BFu1ll_BFu16i");
    static STRUCT_IF_C BFu31ll_BFu1ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu31ll_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu1ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_BFu16i, BFu31ll_BFu1ll_BFu16i)
//============================================================================


struct  BFu31ll_BFu1ll_BFu16ll  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu31ll_BFu1ll_BFu16ll) C1{ FL:31 FL:1 FL:16}



static void Test_BFu31ll_BFu1ll_BFu16ll()
{
  {
    init_simple_test("BFu31ll_BFu1ll_BFu16ll");
    static STRUCT_IF_C BFu31ll_BFu1ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu31ll_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu1ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_BFu16ll, BFu31ll_BFu1ll_BFu16ll)
//============================================================================


struct  BFu31ll_BFu1ll_BFu16s  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu31ll_BFu1ll_BFu16s) C1{ FL:31 FL:1 Fs:16}



static void Test_BFu31ll_BFu1ll_BFu16s()
{
  {
    init_simple_test("BFu31ll_BFu1ll_BFu16s");
    static STRUCT_IF_C BFu31ll_BFu1ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu31ll_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu1ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_BFu16s, BFu31ll_BFu1ll_BFu16s)
//============================================================================


struct  BFu31ll_BFu1ll_BFu17i  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu31ll_BFu1ll_BFu17i) C1{ FL:31 FL:1 Fi:17}



static void Test_BFu31ll_BFu1ll_BFu17i()
{
  {
    init_simple_test("BFu31ll_BFu1ll_BFu17i");
    static STRUCT_IF_C BFu31ll_BFu1ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu31ll_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu1ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_BFu17i, BFu31ll_BFu1ll_BFu17i)
//============================================================================


struct  BFu31ll_BFu1ll_BFu17ll  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu31ll_BFu1ll_BFu17ll) C1{ FL:31 FL:1 FL:17}



static void Test_BFu31ll_BFu1ll_BFu17ll()
{
  {
    init_simple_test("BFu31ll_BFu1ll_BFu17ll");
    static STRUCT_IF_C BFu31ll_BFu1ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu31ll_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu1ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_BFu17ll, BFu31ll_BFu1ll_BFu17ll)
//============================================================================


struct  BFu31ll_BFu1ll_BFu1c  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu31ll_BFu1ll_BFu1c) C1{ FL:31 FL:1 Fc:1}



static void Test_BFu31ll_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFu31ll_BFu1ll_BFu1c");
    static STRUCT_IF_C BFu31ll_BFu1ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31ll_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_BFu1c, BFu31ll_BFu1ll_BFu1c)
//============================================================================


struct  BFu31ll_BFu1ll_BFu1i  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu31ll_BFu1ll_BFu1i) C1{ FL:31 FL:1 Fi:1}



static void Test_BFu31ll_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFu31ll_BFu1ll_BFu1i");
    static STRUCT_IF_C BFu31ll_BFu1ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31ll_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_BFu1i, BFu31ll_BFu1ll_BFu1i)
//============================================================================


struct  BFu31ll_BFu1ll_BFu1ll  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu31ll_BFu1ll_BFu1ll) C1{ FL:31 FL:1 FL:1}



static void Test_BFu31ll_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFu31ll_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFu31ll_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31ll_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_BFu1ll, BFu31ll_BFu1ll_BFu1ll)
//============================================================================


struct  BFu31ll_BFu1ll_BFu1s  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu31ll_BFu1ll_BFu1s) C1{ FL:31 FL:1 Fs:1}



static void Test_BFu31ll_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFu31ll_BFu1ll_BFu1s");
    static STRUCT_IF_C BFu31ll_BFu1ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31ll_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_BFu1s, BFu31ll_BFu1ll_BFu1s)
//============================================================================


struct  BFu31ll_BFu1ll_BFu31i  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu31ll_BFu1ll_BFu31i) C1{ FL:31 FL:1 Fi:31}



static void Test_BFu31ll_BFu1ll_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFu1ll_BFu31i");
    static STRUCT_IF_C BFu31ll_BFu1ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu31ll_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_BFu31i, BFu31ll_BFu1ll_BFu31i)
//============================================================================


struct  BFu31ll_BFu1ll_BFu31ll  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu31ll_BFu1ll_BFu31ll) C1{ FL:31 FL:1 FL:31}



static void Test_BFu31ll_BFu1ll_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFu1ll_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFu1ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu31ll_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_BFu31ll, BFu31ll_BFu1ll_BFu31ll)
//============================================================================


struct  BFu31ll_BFu1ll_BFu32i  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu31ll_BFu1ll_BFu32i) C1{ FL:31 FL:1 Fi:32}



static void Test_BFu31ll_BFu1ll_BFu32i()
{
  {
    init_simple_test("BFu31ll_BFu1ll_BFu32i");
    static STRUCT_IF_C BFu31ll_BFu1ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu31ll_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu1ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_BFu32i, BFu31ll_BFu1ll_BFu32i)
//============================================================================


struct  BFu31ll_BFu1ll_BFu32ll  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu31ll_BFu1ll_BFu32ll) C1{ FL:31 FL:1 FL:32}



static void Test_BFu31ll_BFu1ll_BFu32ll()
{
  {
    init_simple_test("BFu31ll_BFu1ll_BFu32ll");
    static STRUCT_IF_C BFu31ll_BFu1ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu31ll_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu1ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_BFu32ll, BFu31ll_BFu1ll_BFu32ll)
//============================================================================


struct  BFu31ll_BFu1ll_BFu33  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu31ll_BFu1ll_BFu33) C1{ FL:31 FL:1 FL:33}



static void Test_BFu31ll_BFu1ll_BFu33()
{
  {
    init_simple_test("BFu31ll_BFu1ll_BFu33");
    static STRUCT_IF_C BFu31ll_BFu1ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu1ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu31ll_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu31ll_BFu1ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_BFu33, BFu31ll_BFu1ll_BFu33)
//============================================================================


struct  BFu31ll_BFu1ll_BFu7c  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu31ll_BFu1ll_BFu7c) C1{ FL:31 FL:1 Fc:7}



static void Test_BFu31ll_BFu1ll_BFu7c()
{
  {
    init_simple_test("BFu31ll_BFu1ll_BFu7c");
    static STRUCT_IF_C BFu31ll_BFu1ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31ll_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu1ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_BFu7c, BFu31ll_BFu1ll_BFu7c)
//============================================================================


struct  BFu31ll_BFu1ll_BFu7i  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu31ll_BFu1ll_BFu7i) C1{ FL:31 FL:1 Fi:7}



static void Test_BFu31ll_BFu1ll_BFu7i()
{
  {
    init_simple_test("BFu31ll_BFu1ll_BFu7i");
    static STRUCT_IF_C BFu31ll_BFu1ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31ll_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu1ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_BFu7i, BFu31ll_BFu1ll_BFu7i)
//============================================================================


struct  BFu31ll_BFu1ll_BFu7ll  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu31ll_BFu1ll_BFu7ll) C1{ FL:31 FL:1 FL:7}



static void Test_BFu31ll_BFu1ll_BFu7ll()
{
  {
    init_simple_test("BFu31ll_BFu1ll_BFu7ll");
    static STRUCT_IF_C BFu31ll_BFu1ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31ll_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu1ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_BFu7ll, BFu31ll_BFu1ll_BFu7ll)
//============================================================================


struct  BFu31ll_BFu1ll_BFu7s  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu31ll_BFu1ll_BFu7s) C1{ FL:31 FL:1 Fs:7}



static void Test_BFu31ll_BFu1ll_BFu7s()
{
  {
    init_simple_test("BFu31ll_BFu1ll_BFu7s");
    static STRUCT_IF_C BFu31ll_BFu1ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31ll_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu1ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_BFu7s, BFu31ll_BFu1ll_BFu7s)
//============================================================================


struct  BFu31ll_BFu1ll_BFu8c  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu31ll_BFu1ll_BFu8c) C1{ FL:31 FL:1 Fc:8}



static void Test_BFu31ll_BFu1ll_BFu8c()
{
  {
    init_simple_test("BFu31ll_BFu1ll_BFu8c");
    static STRUCT_IF_C BFu31ll_BFu1ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31ll_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu1ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_BFu8c, BFu31ll_BFu1ll_BFu8c)
//============================================================================


struct  BFu31ll_BFu1ll_BFu8i  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu31ll_BFu1ll_BFu8i) C1{ FL:31 FL:1 Fi:8}



static void Test_BFu31ll_BFu1ll_BFu8i()
{
  {
    init_simple_test("BFu31ll_BFu1ll_BFu8i");
    static STRUCT_IF_C BFu31ll_BFu1ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31ll_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu1ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_BFu8i, BFu31ll_BFu1ll_BFu8i)
//============================================================================


struct  BFu31ll_BFu1ll_BFu8ll  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu31ll_BFu1ll_BFu8ll) C1{ FL:31 FL:1 FL:8}



static void Test_BFu31ll_BFu1ll_BFu8ll()
{
  {
    init_simple_test("BFu31ll_BFu1ll_BFu8ll");
    static STRUCT_IF_C BFu31ll_BFu1ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31ll_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu1ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_BFu8ll, BFu31ll_BFu1ll_BFu8ll)
//============================================================================


struct  BFu31ll_BFu1ll_BFu8s  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu31ll_BFu1ll_BFu8s) C1{ FL:31 FL:1 Fs:8}



static void Test_BFu31ll_BFu1ll_BFu8s()
{
  {
    init_simple_test("BFu31ll_BFu1ll_BFu8s");
    static STRUCT_IF_C BFu31ll_BFu1ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31ll_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu1ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_BFu8s, BFu31ll_BFu1ll_BFu8s)
//============================================================================


struct  BFu31ll_BFu1ll_BFu9i  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu31ll_BFu1ll_BFu9i) C1{ FL:31 FL:1 Fi:9}



static void Test_BFu31ll_BFu1ll_BFu9i()
{
  {
    init_simple_test("BFu31ll_BFu1ll_BFu9i");
    static STRUCT_IF_C BFu31ll_BFu1ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu31ll_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu1ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_BFu9i, BFu31ll_BFu1ll_BFu9i)
//============================================================================


struct  BFu31ll_BFu1ll_BFu9ll  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu31ll_BFu1ll_BFu9ll) C1{ FL:31 FL:1 FL:9}



static void Test_BFu31ll_BFu1ll_BFu9ll()
{
  {
    init_simple_test("BFu31ll_BFu1ll_BFu9ll");
    static STRUCT_IF_C BFu31ll_BFu1ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu31ll_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu1ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_BFu9ll, BFu31ll_BFu1ll_BFu9ll)
//============================================================================


struct  BFu31ll_BFu1ll_BFu9s  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu31ll_BFu1ll_BFu9s) C1{ FL:31 FL:1 Fs:9}



static void Test_BFu31ll_BFu1ll_BFu9s()
{
  {
    init_simple_test("BFu31ll_BFu1ll_BFu9s");
    static STRUCT_IF_C BFu31ll_BFu1ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu31ll_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu1ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_BFu9s, BFu31ll_BFu1ll_BFu9s)
//============================================================================


struct  BFu31ll_BFu1ll_C  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  char v3;
};
//SIG(1 BFu31ll_BFu1ll_C) C1{ FL:31 FL:1 Fc}



static void Test_BFu31ll_BFu1ll_C()
{
  {
    init_simple_test("BFu31ll_BFu1ll_C");
    static STRUCT_IF_C BFu31ll_BFu1ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_C");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_C");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_C, BFu31ll_BFu1ll_C)
//============================================================================


struct  BFu31ll_BFu1ll_D  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  double v3;
};
//SIG(1 BFu31ll_BFu1ll_D) C1{ FL:31 FL:1 FL}



static void Test_BFu31ll_BFu1ll_D()
{
  {
    init_simple_test("BFu31ll_BFu1ll_D");
    static STRUCT_IF_C BFu31ll_BFu1ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu1ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_D");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31ll_BFu1ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_D, BFu31ll_BFu1ll_D)
//============================================================================


struct  BFu31ll_BFu1ll_F  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  float v3;
};
//SIG(1 BFu31ll_BFu1ll_F) C1{ FL:31 FL:1 Fi}



static void Test_BFu31ll_BFu1ll_F()
{
  {
    init_simple_test("BFu31ll_BFu1ll_F");
    static STRUCT_IF_C BFu31ll_BFu1ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_F");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_F");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_F, BFu31ll_BFu1ll_F)
//============================================================================


struct  BFu31ll_BFu1ll_I  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  int v3;
};
//SIG(1 BFu31ll_BFu1ll_I) C1{ FL:31 FL:1 Fi}



static void Test_BFu31ll_BFu1ll_I()
{
  {
    init_simple_test("BFu31ll_BFu1ll_I");
    static STRUCT_IF_C BFu31ll_BFu1ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_I");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_I");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_I, BFu31ll_BFu1ll_I)
//============================================================================


struct  BFu31ll_BFu1ll_Ip  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  int *v3;
};
//SIG(1 BFu31ll_BFu1ll_Ip) C1{ FL:31 FL:1 Fp}



static void Test_BFu31ll_BFu1ll_Ip()
{
  {
    init_simple_test("BFu31ll_BFu1ll_Ip");
    static STRUCT_IF_C BFu31ll_BFu1ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu31ll_BFu1ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_Ip");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31ll_BFu1ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_Ip, BFu31ll_BFu1ll_Ip)
//============================================================================


struct  BFu31ll_BFu1ll_L  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  __tsi64 v3;
};
//SIG(1 BFu31ll_BFu1ll_L) C1{ FL:31 FL:1 FL}



static void Test_BFu31ll_BFu1ll_L()
{
  {
    init_simple_test("BFu31ll_BFu1ll_L");
    static STRUCT_IF_C BFu31ll_BFu1ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu1ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_L");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31ll_BFu1ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_L, BFu31ll_BFu1ll_L)
//============================================================================


struct  BFu31ll_BFu1ll_S  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  short v3;
};
//SIG(1 BFu31ll_BFu1ll_S) C1{ FL:31 FL:1 Fs}



static void Test_BFu31ll_BFu1ll_S()
{
  {
    init_simple_test("BFu31ll_BFu1ll_S");
    static STRUCT_IF_C BFu31ll_BFu1ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_S");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_S");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_S, BFu31ll_BFu1ll_S)
//============================================================================


struct  BFu31ll_BFu1ll_Uc  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  unsigned char v3;
};
//SIG(1 BFu31ll_BFu1ll_Uc) C1{ FL:31 FL:1 Fc}



static void Test_BFu31ll_BFu1ll_Uc()
{
  {
    init_simple_test("BFu31ll_BFu1ll_Uc");
    static STRUCT_IF_C BFu31ll_BFu1ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_Uc");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_Uc");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_Uc, BFu31ll_BFu1ll_Uc)
//============================================================================


struct  BFu31ll_BFu1ll_Ui  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  unsigned int v3;
};
//SIG(1 BFu31ll_BFu1ll_Ui) C1{ FL:31 FL:1 Fi}



static void Test_BFu31ll_BFu1ll_Ui()
{
  {
    init_simple_test("BFu31ll_BFu1ll_Ui");
    static STRUCT_IF_C BFu31ll_BFu1ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_Ui");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_Ui");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_Ui, BFu31ll_BFu1ll_Ui)
//============================================================================


struct  BFu31ll_BFu1ll_Ul  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  __tsu64 v3;
};
//SIG(1 BFu31ll_BFu1ll_Ul) C1{ FL:31 FL:1 FL}



static void Test_BFu31ll_BFu1ll_Ul()
{
  {
    init_simple_test("BFu31ll_BFu1ll_Ul");
    static STRUCT_IF_C BFu31ll_BFu1ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu1ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_Ul");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31ll_BFu1ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_Ul, BFu31ll_BFu1ll_Ul)
//============================================================================


struct  BFu31ll_BFu1ll_Us  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  unsigned short v3;
};
//SIG(1 BFu31ll_BFu1ll_Us) C1{ FL:31 FL:1 Fs}



static void Test_BFu31ll_BFu1ll_Us()
{
  {
    init_simple_test("BFu31ll_BFu1ll_Us");
    static STRUCT_IF_C BFu31ll_BFu1ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_Us");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_Us");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_Us, BFu31ll_BFu1ll_Us)
//============================================================================


struct  BFu31ll_BFu1ll_Vp  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  void *v3;
};
//SIG(1 BFu31ll_BFu1ll_Vp) C1{ FL:31 FL:1 Fp}



static void Test_BFu31ll_BFu1ll_Vp()
{
  {
    init_simple_test("BFu31ll_BFu1ll_Vp");
    static STRUCT_IF_C BFu31ll_BFu1ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu31ll_BFu1ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_Vp");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31ll_BFu1ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1ll_Vp, BFu31ll_BFu1ll_Vp)
//============================================================================


struct  BFu31ll_BFu1s  {
  __tsu64 v1:31;
  unsigned short v2:1;
};
//SIG(1 BFu31ll_BFu1s) C1{ FL:31 Fs:1}



static void Test_BFu31ll_BFu1s()
{
  {
    init_simple_test("BFu31ll_BFu1s");
    static STRUCT_IF_C BFu31ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu31ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s, BFu31ll_BFu1s)
//============================================================================


struct  BFu31ll_BFu1s_BFu15i  {
  __tsu64 v1:31;
  unsigned short v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu31ll_BFu1s_BFu15i) C1{ FL:31 Fs:1 Fi:15}



static void Test_BFu31ll_BFu1s_BFu15i()
{
  {
    init_simple_test("BFu31ll_BFu1s_BFu15i");
    static STRUCT_IF_C BFu31ll_BFu1s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu31ll_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu1s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_BFu15i, BFu31ll_BFu1s_BFu15i)
//============================================================================


struct  BFu31ll_BFu1s_BFu15ll  {
  __tsu64 v1:31;
  unsigned short v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu31ll_BFu1s_BFu15ll) C1{ FL:31 Fs:1 FL:15}



static void Test_BFu31ll_BFu1s_BFu15ll()
{
  {
    init_simple_test("BFu31ll_BFu1s_BFu15ll");
    static STRUCT_IF_C BFu31ll_BFu1s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu31ll_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu1s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_BFu15ll, BFu31ll_BFu1s_BFu15ll)
//============================================================================


struct  BFu31ll_BFu1s_BFu15s  {
  __tsu64 v1:31;
  unsigned short v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu31ll_BFu1s_BFu15s) C1{ FL:31 Fs:1 Fs:15}



static void Test_BFu31ll_BFu1s_BFu15s()
{
  {
    init_simple_test("BFu31ll_BFu1s_BFu15s");
    static STRUCT_IF_C BFu31ll_BFu1s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu31ll_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu1s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_BFu15s, BFu31ll_BFu1s_BFu15s)
//============================================================================


struct  BFu31ll_BFu1s_BFu16i  {
  __tsu64 v1:31;
  unsigned short v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu31ll_BFu1s_BFu16i) C1{ FL:31 Fs:1 Fi:16}



static void Test_BFu31ll_BFu1s_BFu16i()
{
  {
    init_simple_test("BFu31ll_BFu1s_BFu16i");
    static STRUCT_IF_C BFu31ll_BFu1s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu31ll_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu1s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_BFu16i, BFu31ll_BFu1s_BFu16i)
//============================================================================


struct  BFu31ll_BFu1s_BFu16ll  {
  __tsu64 v1:31;
  unsigned short v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu31ll_BFu1s_BFu16ll) C1{ FL:31 Fs:1 FL:16}



static void Test_BFu31ll_BFu1s_BFu16ll()
{
  {
    init_simple_test("BFu31ll_BFu1s_BFu16ll");
    static STRUCT_IF_C BFu31ll_BFu1s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu31ll_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu1s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_BFu16ll, BFu31ll_BFu1s_BFu16ll)
//============================================================================


struct  BFu31ll_BFu1s_BFu16s  {
  __tsu64 v1:31;
  unsigned short v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu31ll_BFu1s_BFu16s) C1{ FL:31 Fs:1 Fs:16}



static void Test_BFu31ll_BFu1s_BFu16s()
{
  {
    init_simple_test("BFu31ll_BFu1s_BFu16s");
    static STRUCT_IF_C BFu31ll_BFu1s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu31ll_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu1s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_BFu16s, BFu31ll_BFu1s_BFu16s)
//============================================================================


struct  BFu31ll_BFu1s_BFu17i  {
  __tsu64 v1:31;
  unsigned short v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu31ll_BFu1s_BFu17i) C1{ FL:31 Fs:1 Fi:17}



static void Test_BFu31ll_BFu1s_BFu17i()
{
  {
    init_simple_test("BFu31ll_BFu1s_BFu17i");
    static STRUCT_IF_C BFu31ll_BFu1s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu31ll_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu1s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_BFu17i, BFu31ll_BFu1s_BFu17i)
//============================================================================


struct  BFu31ll_BFu1s_BFu17ll  {
  __tsu64 v1:31;
  unsigned short v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu31ll_BFu1s_BFu17ll) C1{ FL:31 Fs:1 FL:17}



static void Test_BFu31ll_BFu1s_BFu17ll()
{
  {
    init_simple_test("BFu31ll_BFu1s_BFu17ll");
    static STRUCT_IF_C BFu31ll_BFu1s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu31ll_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu1s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_BFu17ll, BFu31ll_BFu1s_BFu17ll)
//============================================================================


struct  BFu31ll_BFu1s_BFu1c  {
  __tsu64 v1:31;
  unsigned short v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu31ll_BFu1s_BFu1c) C1{ FL:31 Fs:1 Fc:1}



static void Test_BFu31ll_BFu1s_BFu1c()
{
  {
    init_simple_test("BFu31ll_BFu1s_BFu1c");
    static STRUCT_IF_C BFu31ll_BFu1s_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31ll_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_BFu1c, BFu31ll_BFu1s_BFu1c)
//============================================================================


struct  BFu31ll_BFu1s_BFu1i  {
  __tsu64 v1:31;
  unsigned short v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu31ll_BFu1s_BFu1i) C1{ FL:31 Fs:1 Fi:1}



static void Test_BFu31ll_BFu1s_BFu1i()
{
  {
    init_simple_test("BFu31ll_BFu1s_BFu1i");
    static STRUCT_IF_C BFu31ll_BFu1s_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31ll_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_BFu1i, BFu31ll_BFu1s_BFu1i)
//============================================================================


struct  BFu31ll_BFu1s_BFu1ll  {
  __tsu64 v1:31;
  unsigned short v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu31ll_BFu1s_BFu1ll) C1{ FL:31 Fs:1 FL:1}



static void Test_BFu31ll_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFu31ll_BFu1s_BFu1ll");
    static STRUCT_IF_C BFu31ll_BFu1s_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31ll_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_BFu1ll, BFu31ll_BFu1s_BFu1ll)
//============================================================================


struct  BFu31ll_BFu1s_BFu1s  {
  __tsu64 v1:31;
  unsigned short v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu31ll_BFu1s_BFu1s) C1{ FL:31 Fs:1 Fs:1}



static void Test_BFu31ll_BFu1s_BFu1s()
{
  {
    init_simple_test("BFu31ll_BFu1s_BFu1s");
    static STRUCT_IF_C BFu31ll_BFu1s_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu31ll_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_BFu1s, BFu31ll_BFu1s_BFu1s)
//============================================================================


struct  BFu31ll_BFu1s_BFu31i  {
  __tsu64 v1:31;
  unsigned short v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu31ll_BFu1s_BFu31i) C1{ FL:31 Fs:1 Fi:31}



static void Test_BFu31ll_BFu1s_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFu1s_BFu31i");
    static STRUCT_IF_C BFu31ll_BFu1s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu31ll_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_BFu31i, BFu31ll_BFu1s_BFu31i)
//============================================================================


struct  BFu31ll_BFu1s_BFu31ll  {
  __tsu64 v1:31;
  unsigned short v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu31ll_BFu1s_BFu31ll) C1{ FL:31 Fs:1 FL:31}



static void Test_BFu31ll_BFu1s_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFu1s_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFu1s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu31ll_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_BFu31ll, BFu31ll_BFu1s_BFu31ll)
//============================================================================


struct  BFu31ll_BFu1s_BFu32i  {
  __tsu64 v1:31;
  unsigned short v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu31ll_BFu1s_BFu32i) C1{ FL:31 Fs:1 Fi:32}



static void Test_BFu31ll_BFu1s_BFu32i()
{
  {
    init_simple_test("BFu31ll_BFu1s_BFu32i");
    static STRUCT_IF_C BFu31ll_BFu1s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu31ll_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu1s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_BFu32i, BFu31ll_BFu1s_BFu32i)
//============================================================================


struct  BFu31ll_BFu1s_BFu32ll  {
  __tsu64 v1:31;
  unsigned short v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu31ll_BFu1s_BFu32ll) C1{ FL:31 Fs:1 FL:32}



static void Test_BFu31ll_BFu1s_BFu32ll()
{
  {
    init_simple_test("BFu31ll_BFu1s_BFu32ll");
    static STRUCT_IF_C BFu31ll_BFu1s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu31ll_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu1s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_BFu32ll, BFu31ll_BFu1s_BFu32ll)
//============================================================================


struct  BFu31ll_BFu1s_BFu33  {
  __tsu64 v1:31;
  unsigned short v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu31ll_BFu1s_BFu33) C1{ FL:31 Fs:1 FL:33}



static void Test_BFu31ll_BFu1s_BFu33()
{
  {
    init_simple_test("BFu31ll_BFu1s_BFu33");
    static STRUCT_IF_C BFu31ll_BFu1s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu1s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu31ll_BFu1s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu31ll_BFu1s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_BFu33, BFu31ll_BFu1s_BFu33)
//============================================================================


struct  BFu31ll_BFu1s_BFu7c  {
  __tsu64 v1:31;
  unsigned short v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu31ll_BFu1s_BFu7c) C1{ FL:31 Fs:1 Fc:7}



static void Test_BFu31ll_BFu1s_BFu7c()
{
  {
    init_simple_test("BFu31ll_BFu1s_BFu7c");
    static STRUCT_IF_C BFu31ll_BFu1s_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31ll_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu1s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_BFu7c, BFu31ll_BFu1s_BFu7c)
//============================================================================


struct  BFu31ll_BFu1s_BFu7i  {
  __tsu64 v1:31;
  unsigned short v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu31ll_BFu1s_BFu7i) C1{ FL:31 Fs:1 Fi:7}



static void Test_BFu31ll_BFu1s_BFu7i()
{
  {
    init_simple_test("BFu31ll_BFu1s_BFu7i");
    static STRUCT_IF_C BFu31ll_BFu1s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31ll_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu1s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_BFu7i, BFu31ll_BFu1s_BFu7i)
//============================================================================


struct  BFu31ll_BFu1s_BFu7ll  {
  __tsu64 v1:31;
  unsigned short v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu31ll_BFu1s_BFu7ll) C1{ FL:31 Fs:1 FL:7}



static void Test_BFu31ll_BFu1s_BFu7ll()
{
  {
    init_simple_test("BFu31ll_BFu1s_BFu7ll");
    static STRUCT_IF_C BFu31ll_BFu1s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31ll_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu1s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_BFu7ll, BFu31ll_BFu1s_BFu7ll)
//============================================================================


struct  BFu31ll_BFu1s_BFu7s  {
  __tsu64 v1:31;
  unsigned short v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu31ll_BFu1s_BFu7s) C1{ FL:31 Fs:1 Fs:7}



static void Test_BFu31ll_BFu1s_BFu7s()
{
  {
    init_simple_test("BFu31ll_BFu1s_BFu7s");
    static STRUCT_IF_C BFu31ll_BFu1s_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu31ll_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu1s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_BFu7s, BFu31ll_BFu1s_BFu7s)
//============================================================================


struct  BFu31ll_BFu1s_BFu8c  {
  __tsu64 v1:31;
  unsigned short v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu31ll_BFu1s_BFu8c) C1{ FL:31 Fs:1 Fc:8}



static void Test_BFu31ll_BFu1s_BFu8c()
{
  {
    init_simple_test("BFu31ll_BFu1s_BFu8c");
    static STRUCT_IF_C BFu31ll_BFu1s_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31ll_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu1s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_BFu8c, BFu31ll_BFu1s_BFu8c)
//============================================================================


struct  BFu31ll_BFu1s_BFu8i  {
  __tsu64 v1:31;
  unsigned short v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu31ll_BFu1s_BFu8i) C1{ FL:31 Fs:1 Fi:8}



static void Test_BFu31ll_BFu1s_BFu8i()
{
  {
    init_simple_test("BFu31ll_BFu1s_BFu8i");
    static STRUCT_IF_C BFu31ll_BFu1s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31ll_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu1s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_BFu8i, BFu31ll_BFu1s_BFu8i)
//============================================================================


struct  BFu31ll_BFu1s_BFu8ll  {
  __tsu64 v1:31;
  unsigned short v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu31ll_BFu1s_BFu8ll) C1{ FL:31 Fs:1 FL:8}



static void Test_BFu31ll_BFu1s_BFu8ll()
{
  {
    init_simple_test("BFu31ll_BFu1s_BFu8ll");
    static STRUCT_IF_C BFu31ll_BFu1s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31ll_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu1s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_BFu8ll, BFu31ll_BFu1s_BFu8ll)
//============================================================================


struct  BFu31ll_BFu1s_BFu8s  {
  __tsu64 v1:31;
  unsigned short v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu31ll_BFu1s_BFu8s) C1{ FL:31 Fs:1 Fs:8}



static void Test_BFu31ll_BFu1s_BFu8s()
{
  {
    init_simple_test("BFu31ll_BFu1s_BFu8s");
    static STRUCT_IF_C BFu31ll_BFu1s_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu31ll_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu1s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_BFu8s, BFu31ll_BFu1s_BFu8s)
//============================================================================


struct  BFu31ll_BFu1s_BFu9i  {
  __tsu64 v1:31;
  unsigned short v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu31ll_BFu1s_BFu9i) C1{ FL:31 Fs:1 Fi:9}



static void Test_BFu31ll_BFu1s_BFu9i()
{
  {
    init_simple_test("BFu31ll_BFu1s_BFu9i");
    static STRUCT_IF_C BFu31ll_BFu1s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu31ll_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu1s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_BFu9i, BFu31ll_BFu1s_BFu9i)
//============================================================================


struct  BFu31ll_BFu1s_BFu9ll  {
  __tsu64 v1:31;
  unsigned short v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu31ll_BFu1s_BFu9ll) C1{ FL:31 Fs:1 FL:9}



static void Test_BFu31ll_BFu1s_BFu9ll()
{
  {
    init_simple_test("BFu31ll_BFu1s_BFu9ll");
    static STRUCT_IF_C BFu31ll_BFu1s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu31ll_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu1s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_BFu9ll, BFu31ll_BFu1s_BFu9ll)
//============================================================================


struct  BFu31ll_BFu1s_BFu9s  {
  __tsu64 v1:31;
  unsigned short v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu31ll_BFu1s_BFu9s) C1{ FL:31 Fs:1 Fs:9}



static void Test_BFu31ll_BFu1s_BFu9s()
{
  {
    init_simple_test("BFu31ll_BFu1s_BFu9s");
    static STRUCT_IF_C BFu31ll_BFu1s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu31ll_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu1s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_BFu9s, BFu31ll_BFu1s_BFu9s)
//============================================================================


struct  BFu31ll_BFu1s_C  {
  __tsu64 v1:31;
  unsigned short v2:1;
  char v3;
};
//SIG(1 BFu31ll_BFu1s_C) C1{ FL:31 Fs:1 Fc}



static void Test_BFu31ll_BFu1s_C()
{
  {
    init_simple_test("BFu31ll_BFu1s_C");
    static STRUCT_IF_C BFu31ll_BFu1s_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_C");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_C");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_C, BFu31ll_BFu1s_C)
//============================================================================


struct  BFu31ll_BFu1s_D  {
  __tsu64 v1:31;
  unsigned short v2:1;
  double v3;
};
//SIG(1 BFu31ll_BFu1s_D) C1{ FL:31 Fs:1 FL}



static void Test_BFu31ll_BFu1s_D()
{
  {
    init_simple_test("BFu31ll_BFu1s_D");
    static STRUCT_IF_C BFu31ll_BFu1s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu1s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_D");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31ll_BFu1s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_D, BFu31ll_BFu1s_D)
//============================================================================


struct  BFu31ll_BFu1s_F  {
  __tsu64 v1:31;
  unsigned short v2:1;
  float v3;
};
//SIG(1 BFu31ll_BFu1s_F) C1{ FL:31 Fs:1 Fi}



static void Test_BFu31ll_BFu1s_F()
{
  {
    init_simple_test("BFu31ll_BFu1s_F");
    static STRUCT_IF_C BFu31ll_BFu1s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_F");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_F");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_F, BFu31ll_BFu1s_F)
//============================================================================


struct  BFu31ll_BFu1s_I  {
  __tsu64 v1:31;
  unsigned short v2:1;
  int v3;
};
//SIG(1 BFu31ll_BFu1s_I) C1{ FL:31 Fs:1 Fi}



static void Test_BFu31ll_BFu1s_I()
{
  {
    init_simple_test("BFu31ll_BFu1s_I");
    static STRUCT_IF_C BFu31ll_BFu1s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_I");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_I");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_I, BFu31ll_BFu1s_I)
//============================================================================


struct  BFu31ll_BFu1s_Ip  {
  __tsu64 v1:31;
  unsigned short v2:1;
  int *v3;
};
//SIG(1 BFu31ll_BFu1s_Ip) C1{ FL:31 Fs:1 Fp}



static void Test_BFu31ll_BFu1s_Ip()
{
  {
    init_simple_test("BFu31ll_BFu1s_Ip");
    static STRUCT_IF_C BFu31ll_BFu1s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu31ll_BFu1s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_Ip");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31ll_BFu1s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_Ip, BFu31ll_BFu1s_Ip)
//============================================================================


struct  BFu31ll_BFu1s_L  {
  __tsu64 v1:31;
  unsigned short v2:1;
  __tsi64 v3;
};
//SIG(1 BFu31ll_BFu1s_L) C1{ FL:31 Fs:1 FL}



static void Test_BFu31ll_BFu1s_L()
{
  {
    init_simple_test("BFu31ll_BFu1s_L");
    static STRUCT_IF_C BFu31ll_BFu1s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu1s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_L");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31ll_BFu1s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_L, BFu31ll_BFu1s_L)
//============================================================================


struct  BFu31ll_BFu1s_S  {
  __tsu64 v1:31;
  unsigned short v2:1;
  short v3;
};
//SIG(1 BFu31ll_BFu1s_S) C1{ FL:31 Fs:1 Fs}



static void Test_BFu31ll_BFu1s_S()
{
  {
    init_simple_test("BFu31ll_BFu1s_S");
    static STRUCT_IF_C BFu31ll_BFu1s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_S");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_S");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_S, BFu31ll_BFu1s_S)
//============================================================================


struct  BFu31ll_BFu1s_Uc  {
  __tsu64 v1:31;
  unsigned short v2:1;
  unsigned char v3;
};
//SIG(1 BFu31ll_BFu1s_Uc) C1{ FL:31 Fs:1 Fc}



static void Test_BFu31ll_BFu1s_Uc()
{
  {
    init_simple_test("BFu31ll_BFu1s_Uc");
    static STRUCT_IF_C BFu31ll_BFu1s_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_Uc");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_Uc");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_Uc, BFu31ll_BFu1s_Uc)
//============================================================================


struct  BFu31ll_BFu1s_Ui  {
  __tsu64 v1:31;
  unsigned short v2:1;
  unsigned int v3;
};
//SIG(1 BFu31ll_BFu1s_Ui) C1{ FL:31 Fs:1 Fi}



static void Test_BFu31ll_BFu1s_Ui()
{
  {
    init_simple_test("BFu31ll_BFu1s_Ui");
    static STRUCT_IF_C BFu31ll_BFu1s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_Ui");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_Ui");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_Ui, BFu31ll_BFu1s_Ui)
//============================================================================


struct  BFu31ll_BFu1s_Ul  {
  __tsu64 v1:31;
  unsigned short v2:1;
  __tsu64 v3;
};
//SIG(1 BFu31ll_BFu1s_Ul) C1{ FL:31 Fs:1 FL}



static void Test_BFu31ll_BFu1s_Ul()
{
  {
    init_simple_test("BFu31ll_BFu1s_Ul");
    static STRUCT_IF_C BFu31ll_BFu1s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu1s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_Ul");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31ll_BFu1s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_Ul, BFu31ll_BFu1s_Ul)
//============================================================================


struct  BFu31ll_BFu1s_Us  {
  __tsu64 v1:31;
  unsigned short v2:1;
  unsigned short v3;
};
//SIG(1 BFu31ll_BFu1s_Us) C1{ FL:31 Fs:1 Fs}



static void Test_BFu31ll_BFu1s_Us()
{
  {
    init_simple_test("BFu31ll_BFu1s_Us");
    static STRUCT_IF_C BFu31ll_BFu1s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_Us");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_Us");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_Us, BFu31ll_BFu1s_Us)
//============================================================================


struct  BFu31ll_BFu1s_Vp  {
  __tsu64 v1:31;
  unsigned short v2:1;
  void *v3;
};
//SIG(1 BFu31ll_BFu1s_Vp) C1{ FL:31 Fs:1 Fp}



static void Test_BFu31ll_BFu1s_Vp()
{
  {
    init_simple_test("BFu31ll_BFu1s_Vp");
    static STRUCT_IF_C BFu31ll_BFu1s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu31ll_BFu1s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_Vp");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu31ll_BFu1s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu1s_Vp, BFu31ll_BFu1s_Vp)
//============================================================================


struct  BFu31ll_BFu31i  {
  __tsu64 v1:31;
  unsigned int v2:31;
};
//SIG(1 BFu31ll_BFu31i) C1{ FL:31 Fi:31}



static void Test_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFu31i");
    static STRUCT_IF_C BFu31ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i, BFu31ll_BFu31i)
//============================================================================


struct  BFu31ll_BFu31i_BFs31i  {
  __tsu64 v1:31;
  unsigned int v2:31;
  signed int v3:31;
};
//SIG(1 BFu31ll_BFu31i_BFs31i) C1{ FL:31 Fi:31 Fi:31}



static void Test_BFu31ll_BFu31i_BFs31i()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFs31i");
    static STRUCT_IF_C BFu31ll_BFu31i_BFs31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFu31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFs31i, BFu31ll_BFu31i_BFs31i)
//============================================================================


struct  BFu31ll_BFu31i_BFs31i_BFs31i  {
  __tsu64 v1:31;
  unsigned int v2:31;
  signed int v3:31;
  signed int v4:31;
};
//SIG(1 BFu31ll_BFu31i_BFs31i_BFs31i) C1{ FL:31 Fi:31 Fi:31 Fi:31}



static void Test_BFu31ll_BFu31i_BFs31i_BFs31i()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFs31i_BFs31i");
    static STRUCT_IF_C BFu31ll_BFu31i_BFs31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31i_BFs31i_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFs31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFu31i_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFu31i_BFs31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFs31i_BFs31i, BFu31ll_BFu31i_BFs31i_BFs31i)
//============================================================================


struct  BFu31ll_BFu31i_BFs31i_BFs31ll  {
  __tsu64 v1:31;
  unsigned int v2:31;
  signed int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31ll_BFu31i_BFs31i_BFs31ll) C1{ FL:31 Fi:31 Fi:31 FL:31}



static void Test_BFu31ll_BFu31i_BFs31i_BFs31ll()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFs31i_BFs31ll");
    static STRUCT_IF_C BFu31ll_BFu31i_BFs31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31i_BFs31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFs31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31ll_BFu31i_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFu31i_BFs31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFs31i_BFs31ll, BFu31ll_BFu31i_BFs31i_BFs31ll)
//============================================================================


struct  BFu31ll_BFu31i_BFs31i_BFu31i  {
  __tsu64 v1:31;
  unsigned int v2:31;
  signed int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31ll_BFu31i_BFs31i_BFu31i) C1{ FL:31 Fi:31 Fi:31 Fi:31}



static void Test_BFu31ll_BFu31i_BFs31i_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFs31i_BFu31i");
    static STRUCT_IF_C BFu31ll_BFu31i_BFs31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31i_BFs31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFs31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFu31i_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFs31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFs31i_BFu31i, BFu31ll_BFu31i_BFs31i_BFu31i)
//============================================================================


struct  BFu31ll_BFu31i_BFs31i_BFu31ll  {
  __tsu64 v1:31;
  unsigned int v2:31;
  signed int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31ll_BFu31i_BFs31i_BFu31ll) C1{ FL:31 Fi:31 Fi:31 FL:31}



static void Test_BFu31ll_BFu31i_BFs31i_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFs31i_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFu31i_BFs31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31i_BFs31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFs31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31ll_BFu31i_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFs31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFs31i_BFu31ll, BFu31ll_BFu31i_BFs31i_BFu31ll)
//============================================================================


struct  BFu31ll_BFu31i_BFs31ll  {
  __tsu64 v1:31;
  unsigned int v2:31;
  signed __tsi64 v3:31;
};
//SIG(1 BFu31ll_BFu31i_BFs31ll) C1{ FL:31 Fi:31 FL:31}



static void Test_BFu31ll_BFu31i_BFs31ll()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFs31ll");
    static STRUCT_IF_C BFu31ll_BFu31i_BFs31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFu31ll_BFu31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFs31ll, BFu31ll_BFu31i_BFs31ll)
//============================================================================


struct  BFu31ll_BFu31i_BFs31ll_BFs31i  {
  __tsu64 v1:31;
  unsigned int v2:31;
  signed __tsi64 v3:31;
  signed int v4:31;
};
//SIG(1 BFu31ll_BFu31i_BFs31ll_BFs31i) C1{ FL:31 Fi:31 FL:31 Fi:31}



static void Test_BFu31ll_BFu31i_BFs31ll_BFs31i()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFs31ll_BFs31i");
    static STRUCT_IF_C BFu31ll_BFu31i_BFs31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31i_BFs31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFs31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31ll_BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFu31ll_BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFu31i_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFu31i_BFs31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFs31ll_BFs31i, BFu31ll_BFu31i_BFs31ll_BFs31i)
//============================================================================


struct  BFu31ll_BFu31i_BFs31ll_BFs31ll  {
  __tsu64 v1:31;
  unsigned int v2:31;
  signed __tsi64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31ll_BFu31i_BFs31ll_BFs31ll) C1{ FL:31 Fi:31 FL:31 FL:31}



static void Test_BFu31ll_BFu31i_BFs31ll_BFs31ll()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFs31ll_BFs31ll");
    static STRUCT_IF_C BFu31ll_BFu31i_BFs31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31i_BFs31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFs31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31ll_BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFu31ll_BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFu31ll_BFu31i_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_sll(1LL<<30), "BFu31ll_BFu31i_BFs31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFs31ll_BFs31ll, BFu31ll_BFu31i_BFs31ll_BFs31ll)
//============================================================================


struct  BFu31ll_BFu31i_BFs31ll_BFu31i  {
  __tsu64 v1:31;
  unsigned int v2:31;
  signed __tsi64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31ll_BFu31i_BFs31ll_BFu31i) C1{ FL:31 Fi:31 FL:31 Fi:31}



static void Test_BFu31ll_BFu31i_BFs31ll_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFs31ll_BFu31i");
    static STRUCT_IF_C BFu31ll_BFu31i_BFs31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31i_BFs31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFs31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31ll_BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFu31ll_BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFu31i_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFs31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFs31ll_BFu31i, BFu31ll_BFu31i_BFs31ll_BFu31i)
//============================================================================


struct  BFu31ll_BFu31i_BFs31ll_BFu31ll  {
  __tsu64 v1:31;
  unsigned int v2:31;
  signed __tsi64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31ll_BFu31i_BFs31ll_BFu31ll) C1{ FL:31 Fi:31 FL:31 FL:31}



static void Test_BFu31ll_BFu31i_BFs31ll_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFs31ll_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFu31i_BFs31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31i_BFs31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFs31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31ll_BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_sll(1LL<<30), "BFu31ll_BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFu31ll_BFu31i_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFs31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFs31ll_BFu31ll, BFu31ll_BFu31i_BFs31ll_BFu31ll)
//============================================================================


struct  BFu31ll_BFu31i_BFu15i  {
  __tsu64 v1:31;
  unsigned int v2:31;
  unsigned int v3:15;
};
//SIG(1 BFu31ll_BFu31i_BFu15i) C1{ FL:31 Fi:31 Fi:15}



static void Test_BFu31ll_BFu31i_BFu15i()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu15i");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31ll_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu31i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu15i, BFu31ll_BFu31i_BFu15i)
//============================================================================


struct  BFu31ll_BFu31i_BFu15ll  {
  __tsu64 v1:31;
  unsigned int v2:31;
  __tsu64 v3:15;
};
//SIG(1 BFu31ll_BFu31i_BFu15ll) C1{ FL:31 Fi:31 FL:15}



static void Test_BFu31ll_BFu31i_BFu15ll()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu15ll");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, 1, "BFu31ll_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, hide_ull(1LL<<14), "BFu31ll_BFu31i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu15ll, BFu31ll_BFu31i_BFu15ll)
//============================================================================


struct  BFu31ll_BFu31i_BFu15s  {
  __tsu64 v1:31;
  unsigned int v2:31;
  unsigned short v3:15;
};
//SIG(1 BFu31ll_BFu31i_BFu15s) C1{ FL:31 Fi:31 Fs:15}



static void Test_BFu31ll_BFu31i_BFu15s()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu15s");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31ll_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu31i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu15s, BFu31ll_BFu31i_BFu15s)
//============================================================================


struct  BFu31ll_BFu31i_BFu16i  {
  __tsu64 v1:31;
  unsigned int v2:31;
  unsigned int v3:16;
};
//SIG(1 BFu31ll_BFu31i_BFu16i) C1{ FL:31 Fi:31 Fi:16}



static void Test_BFu31ll_BFu31i_BFu16i()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu16i");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31ll_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu31i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu16i, BFu31ll_BFu31i_BFu16i)
//============================================================================


struct  BFu31ll_BFu31i_BFu16ll  {
  __tsu64 v1:31;
  unsigned int v2:31;
  __tsu64 v3:16;
};
//SIG(1 BFu31ll_BFu31i_BFu16ll) C1{ FL:31 Fi:31 FL:16}



static void Test_BFu31ll_BFu31i_BFu16ll()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu16ll");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, 1, "BFu31ll_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, hide_ull(1LL<<15), "BFu31ll_BFu31i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu16ll, BFu31ll_BFu31i_BFu16ll)
//============================================================================


struct  BFu31ll_BFu31i_BFu16s  {
  __tsu64 v1:31;
  unsigned int v2:31;
  unsigned short v3:16;
};
//SIG(1 BFu31ll_BFu31i_BFu16s) C1{ FL:31 Fi:31 Fs:16}



static void Test_BFu31ll_BFu31i_BFu16s()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu16s");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31ll_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu31i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu16s, BFu31ll_BFu31i_BFu16s)
//============================================================================


struct  BFu31ll_BFu31i_BFu17i  {
  __tsu64 v1:31;
  unsigned int v2:31;
  unsigned int v3:17;
};
//SIG(1 BFu31ll_BFu31i_BFu17i) C1{ FL:31 Fi:31 Fi:17}



static void Test_BFu31ll_BFu31i_BFu17i()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu17i");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31ll_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu31i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu17i, BFu31ll_BFu31i_BFu17i)
//============================================================================


struct  BFu31ll_BFu31i_BFu17ll  {
  __tsu64 v1:31;
  unsigned int v2:31;
  __tsu64 v3:17;
};
//SIG(1 BFu31ll_BFu31i_BFu17ll) C1{ FL:31 Fi:31 FL:17}



static void Test_BFu31ll_BFu31i_BFu17ll()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu17ll");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, 1, "BFu31ll_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, hide_ull(1LL<<16), "BFu31ll_BFu31i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu17ll, BFu31ll_BFu31i_BFu17ll)
//============================================================================


struct  BFu31ll_BFu31i_BFu1c  {
  __tsu64 v1:31;
  unsigned int v2:31;
  unsigned char v3:1;
};
//SIG(1 BFu31ll_BFu31i_BFu1c) C1{ FL:31 Fi:31 Fc:1}



static void Test_BFu31ll_BFu31i_BFu1c()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu1c");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu31i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu1c");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu31ll_BFu31i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu1c, BFu31ll_BFu31i_BFu1c)
//============================================================================


struct  BFu31ll_BFu31i_BFu1i  {
  __tsu64 v1:31;
  unsigned int v2:31;
  unsigned int v3:1;
};
//SIG(1 BFu31ll_BFu31i_BFu1i) C1{ FL:31 Fi:31 Fi:1}



static void Test_BFu31ll_BFu31i_BFu1i()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu1i");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu31i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu1i");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu31ll_BFu31i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu1i, BFu31ll_BFu31i_BFu1i)
//============================================================================


struct  BFu31ll_BFu31i_BFu1ll  {
  __tsu64 v1:31;
  unsigned int v2:31;
  __tsu64 v3:1;
};
//SIG(1 BFu31ll_BFu31i_BFu1ll) C1{ FL:31 Fi:31 FL:1}



static void Test_BFu31ll_BFu31i_BFu1ll()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu1ll");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu31i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu1ll");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu31ll_BFu31i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu1ll, BFu31ll_BFu31i_BFu1ll)
//============================================================================


struct  BFu31ll_BFu31i_BFu1s  {
  __tsu64 v1:31;
  unsigned int v2:31;
  unsigned short v3:1;
};
//SIG(1 BFu31ll_BFu31i_BFu1s) C1{ FL:31 Fi:31 Fs:1}



static void Test_BFu31ll_BFu31i_BFu1s()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu1s");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu31i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu1s");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu31ll_BFu31i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu1s, BFu31ll_BFu31i_BFu1s)
//============================================================================


struct  BFu31ll_BFu31i_BFu31i  {
  __tsu64 v1:31;
  unsigned int v2:31;
  unsigned int v3:31;
};
//SIG(1 BFu31ll_BFu31i_BFu31i) C1{ FL:31 Fi:31 Fi:31}



static void Test_BFu31ll_BFu31i_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu31i");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu31i, BFu31ll_BFu31i_BFu31i)
//============================================================================


struct  BFu31ll_BFu31i_BFu31i_BFs31i  {
  __tsu64 v1:31;
  unsigned int v2:31;
  unsigned int v3:31;
  signed int v4:31;
};
//SIG(1 BFu31ll_BFu31i_BFu31i_BFs31i) C1{ FL:31 Fi:31 Fi:31 Fi:31}



static void Test_BFu31ll_BFu31i_BFu31i_BFs31i()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu31i_BFs31i");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31i_BFu31i_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFu31i_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFu31i_BFu31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu31i_BFs31i, BFu31ll_BFu31i_BFu31i_BFs31i)
//============================================================================


struct  BFu31ll_BFu31i_BFu31i_BFs31ll  {
  __tsu64 v1:31;
  unsigned int v2:31;
  unsigned int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31ll_BFu31i_BFu31i_BFs31ll) C1{ FL:31 Fi:31 Fi:31 FL:31}



static void Test_BFu31ll_BFu31i_BFu31i_BFs31ll()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu31i_BFs31ll");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31i_BFu31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31ll_BFu31i_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFu31i_BFu31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu31i_BFs31ll, BFu31ll_BFu31i_BFu31i_BFs31ll)
//============================================================================


struct  BFu31ll_BFu31i_BFu31i_BFu31i  {
  __tsu64 v1:31;
  unsigned int v2:31;
  unsigned int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31ll_BFu31i_BFu31i_BFu31i) C1{ FL:31 Fi:31 Fi:31 Fi:31}



static void Test_BFu31ll_BFu31i_BFu31i_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu31i_BFu31i");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31i_BFu31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFu31i_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu31i_BFu31i, BFu31ll_BFu31i_BFu31i_BFu31i)
//============================================================================


struct  BFu31ll_BFu31i_BFu31i_BFu31ll  {
  __tsu64 v1:31;
  unsigned int v2:31;
  unsigned int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31ll_BFu31i_BFu31i_BFu31ll) C1{ FL:31 Fi:31 Fi:31 FL:31}



static void Test_BFu31ll_BFu31i_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu31i_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31i_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31ll_BFu31i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu31i_BFu31ll, BFu31ll_BFu31i_BFu31i_BFu31ll)
//============================================================================


struct  BFu31ll_BFu31i_BFu31ll  {
  __tsu64 v1:31;
  unsigned int v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFu31ll_BFu31i_BFu31ll) C1{ FL:31 Fi:31 FL:31}



static void Test_BFu31ll_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu31ll, BFu31ll_BFu31i_BFu31ll)
//============================================================================


struct  BFu31ll_BFu31i_BFu31ll_BFs31i  {
  __tsu64 v1:31;
  unsigned int v2:31;
  __tsu64 v3:31;
  signed int v4:31;
};
//SIG(1 BFu31ll_BFu31i_BFu31ll_BFs31i) C1{ FL:31 Fi:31 FL:31 Fi:31}



static void Test_BFu31ll_BFu31i_BFu31ll_BFs31i()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu31ll_BFs31i");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31i_BFu31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31ll_BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFu31i_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFu31i_BFu31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu31ll_BFs31i, BFu31ll_BFu31i_BFu31ll_BFs31i)
//============================================================================


struct  BFu31ll_BFu31i_BFu31ll_BFs31ll  {
  __tsu64 v1:31;
  unsigned int v2:31;
  __tsu64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31ll_BFu31i_BFu31ll_BFs31ll) C1{ FL:31 Fi:31 FL:31 FL:31}



static void Test_BFu31ll_BFu31i_BFu31ll_BFs31ll()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu31ll_BFs31ll");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31i_BFu31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31ll_BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFu31ll_BFu31i_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_sll(1LL<<30), "BFu31ll_BFu31i_BFu31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu31ll_BFs31ll, BFu31ll_BFu31i_BFu31ll_BFs31ll)
//============================================================================


struct  BFu31ll_BFu31i_BFu31ll_BFu31i  {
  __tsu64 v1:31;
  unsigned int v2:31;
  __tsu64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31ll_BFu31i_BFu31ll_BFu31i) C1{ FL:31 Fi:31 FL:31 Fi:31}



static void Test_BFu31ll_BFu31i_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu31ll_BFu31i");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31i_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31ll_BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFu31i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu31ll_BFu31i, BFu31ll_BFu31i_BFu31ll_BFu31i)
//============================================================================


struct  BFu31ll_BFu31i_BFu31ll_BFu31ll  {
  __tsu64 v1:31;
  unsigned int v2:31;
  __tsu64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31ll_BFu31i_BFu31ll_BFu31ll) C1{ FL:31 Fi:31 FL:31 FL:31}



static void Test_BFu31ll_BFu31i_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31i_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31ll_BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, 1, "BFu31ll_BFu31i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,6), 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu31ll_BFu31ll, BFu31ll_BFu31i_BFu31ll_BFu31ll)
//============================================================================


struct  BFu31ll_BFu31i_BFu32i  {
  __tsu64 v1:31;
  unsigned int v2:31;
  unsigned int v3:32;
};
//SIG(1 BFu31ll_BFu31i_BFu32i) C1{ FL:31 Fi:31 Fi:32}



static void Test_BFu31ll_BFu31i_BFu32i()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu32i");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31ll_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu31i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu32i, BFu31ll_BFu31i_BFu32i)
//============================================================================


struct  BFu31ll_BFu31i_BFu32ll  {
  __tsu64 v1:31;
  unsigned int v2:31;
  __tsu64 v3:32;
};
//SIG(1 BFu31ll_BFu31i_BFu32ll) C1{ FL:31 Fi:31 FL:32}



static void Test_BFu31ll_BFu31i_BFu32ll()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu32ll");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, 1, "BFu31ll_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu31ll_BFu31i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu32ll, BFu31ll_BFu31i_BFu32ll)
//============================================================================


struct  BFu31ll_BFu31i_BFu33  {
  __tsu64 v1:31;
  unsigned int v2:31;
  __tsu64 v3:33;
};
//SIG(1 BFu31ll_BFu31i_BFu33) C1{ FL:31 Fi:31 FL:33}



static void Test_BFu31ll_BFu31i_BFu33()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu33");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, 1, "BFu31ll_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu31ll_BFu31i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu33, BFu31ll_BFu31i_BFu33)
//============================================================================


struct  BFu31ll_BFu31i_BFu7c  {
  __tsu64 v1:31;
  unsigned int v2:31;
  unsigned char v3:7;
};
//SIG(1 BFu31ll_BFu31i_BFu7c) C1{ FL:31 Fi:31 Fc:7}



static void Test_BFu31ll_BFu31i_BFu7c()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu7c");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31ll_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu31i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu7c, BFu31ll_BFu31i_BFu7c)
//============================================================================


struct  BFu31ll_BFu31i_BFu7i  {
  __tsu64 v1:31;
  unsigned int v2:31;
  unsigned int v3:7;
};
//SIG(1 BFu31ll_BFu31i_BFu7i) C1{ FL:31 Fi:31 Fi:7}



static void Test_BFu31ll_BFu31i_BFu7i()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu7i");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31ll_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu31i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu7i, BFu31ll_BFu31i_BFu7i)
//============================================================================


struct  BFu31ll_BFu31i_BFu7ll  {
  __tsu64 v1:31;
  unsigned int v2:31;
  __tsu64 v3:7;
};
//SIG(1 BFu31ll_BFu31i_BFu7ll) C1{ FL:31 Fi:31 FL:7}



static void Test_BFu31ll_BFu31i_BFu7ll()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu7ll");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, 1, "BFu31ll_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, hide_ull(1LL<<6), "BFu31ll_BFu31i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu7ll, BFu31ll_BFu31i_BFu7ll)
//============================================================================


struct  BFu31ll_BFu31i_BFu7s  {
  __tsu64 v1:31;
  unsigned int v2:31;
  unsigned short v3:7;
};
//SIG(1 BFu31ll_BFu31i_BFu7s) C1{ FL:31 Fi:31 Fs:7}



static void Test_BFu31ll_BFu31i_BFu7s()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu7s");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31ll_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu31i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu7s, BFu31ll_BFu31i_BFu7s)
//============================================================================


struct  BFu31ll_BFu31i_BFu8c  {
  __tsu64 v1:31;
  unsigned int v2:31;
  unsigned char v3:8;
};
//SIG(1 BFu31ll_BFu31i_BFu8c) C1{ FL:31 Fi:31 Fc:8}



static void Test_BFu31ll_BFu31i_BFu8c()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu8c");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31ll_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu31i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu8c, BFu31ll_BFu31i_BFu8c)
//============================================================================


struct  BFu31ll_BFu31i_BFu8i  {
  __tsu64 v1:31;
  unsigned int v2:31;
  unsigned int v3:8;
};
//SIG(1 BFu31ll_BFu31i_BFu8i) C1{ FL:31 Fi:31 Fi:8}



static void Test_BFu31ll_BFu31i_BFu8i()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu8i");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31ll_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu31i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu8i, BFu31ll_BFu31i_BFu8i)
//============================================================================


struct  BFu31ll_BFu31i_BFu8ll  {
  __tsu64 v1:31;
  unsigned int v2:31;
  __tsu64 v3:8;
};
//SIG(1 BFu31ll_BFu31i_BFu8ll) C1{ FL:31 Fi:31 FL:8}



static void Test_BFu31ll_BFu31i_BFu8ll()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu8ll");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, 1, "BFu31ll_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, hide_ull(1LL<<7), "BFu31ll_BFu31i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu8ll, BFu31ll_BFu31i_BFu8ll)
//============================================================================


struct  BFu31ll_BFu31i_BFu8s  {
  __tsu64 v1:31;
  unsigned int v2:31;
  unsigned short v3:8;
};
//SIG(1 BFu31ll_BFu31i_BFu8s) C1{ FL:31 Fi:31 Fs:8}



static void Test_BFu31ll_BFu31i_BFu8s()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu8s");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31ll_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu31i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu8s, BFu31ll_BFu31i_BFu8s)
//============================================================================


struct  BFu31ll_BFu31i_BFu9i  {
  __tsu64 v1:31;
  unsigned int v2:31;
  unsigned int v3:9;
};
//SIG(1 BFu31ll_BFu31i_BFu9i) C1{ FL:31 Fi:31 Fi:9}



static void Test_BFu31ll_BFu31i_BFu9i()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu9i");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31ll_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu31i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu9i, BFu31ll_BFu31i_BFu9i)
//============================================================================


struct  BFu31ll_BFu31i_BFu9ll  {
  __tsu64 v1:31;
  unsigned int v2:31;
  __tsu64 v3:9;
};
//SIG(1 BFu31ll_BFu31i_BFu9ll) C1{ FL:31 Fi:31 FL:9}



static void Test_BFu31ll_BFu31i_BFu9ll()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu9ll");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, 1, "BFu31ll_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, hide_ull(1LL<<8), "BFu31ll_BFu31i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu9ll, BFu31ll_BFu31i_BFu9ll)
//============================================================================


struct  BFu31ll_BFu31i_BFu9s  {
  __tsu64 v1:31;
  unsigned int v2:31;
  unsigned short v3:9;
};
//SIG(1 BFu31ll_BFu31i_BFu9s) C1{ FL:31 Fi:31 Fs:9}



static void Test_BFu31ll_BFu31i_BFu9s()
{
  {
    init_simple_test("BFu31ll_BFu31i_BFu9s");
    static STRUCT_IF_C BFu31ll_BFu31i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31ll_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu31i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_BFu9s, BFu31ll_BFu31i_BFu9s)
//============================================================================


struct  BFu31ll_BFu31i_C  {
  __tsu64 v1:31;
  unsigned int v2:31;
  char v3;
};
//SIG(1 BFu31ll_BFu31i_C) C1{ FL:31 Fi:31 Fc}



static void Test_BFu31ll_BFu31i_C()
{
  {
    init_simple_test("BFu31ll_BFu31i_C");
    static STRUCT_IF_C BFu31ll_BFu31i_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_C");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_C");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_C");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu31i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_C, BFu31ll_BFu31i_C)
//============================================================================


struct  BFu31ll_BFu31i_D  {
  __tsu64 v1:31;
  unsigned int v2:31;
  double v3;
};
//SIG(1 BFu31ll_BFu31i_D) C1{ FL:31 Fi:31 FL}



static void Test_BFu31ll_BFu31i_D()
{
  {
    init_simple_test("BFu31ll_BFu31i_D");
    static STRUCT_IF_C BFu31ll_BFu31i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_D");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_D");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_D");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu31i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_D, BFu31ll_BFu31i_D)
//============================================================================


struct  BFu31ll_BFu31i_F  {
  __tsu64 v1:31;
  unsigned int v2:31;
  float v3;
};
//SIG(1 BFu31ll_BFu31i_F) C1{ FL:31 Fi:31 Fi}



static void Test_BFu31ll_BFu31i_F()
{
  {
    init_simple_test("BFu31ll_BFu31i_F");
    static STRUCT_IF_C BFu31ll_BFu31i_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_F");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_F");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_F");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu31i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_F, BFu31ll_BFu31i_F)
//============================================================================


struct  BFu31ll_BFu31i_I  {
  __tsu64 v1:31;
  unsigned int v2:31;
  int v3;
};
//SIG(1 BFu31ll_BFu31i_I) C1{ FL:31 Fi:31 Fi}



static void Test_BFu31ll_BFu31i_I()
{
  {
    init_simple_test("BFu31ll_BFu31i_I");
    static STRUCT_IF_C BFu31ll_BFu31i_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_I");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_I");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_I");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu31i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_I, BFu31ll_BFu31i_I)
//============================================================================


struct  BFu31ll_BFu31i_Ip  {
  __tsu64 v1:31;
  unsigned int v2:31;
  int *v3;
};
//SIG(1 BFu31ll_BFu31i_Ip) C1{ FL:31 Fi:31 Fp}



static void Test_BFu31ll_BFu31i_Ip()
{
  {
    init_simple_test("BFu31ll_BFu31i_Ip");
    static STRUCT_IF_C BFu31ll_BFu31i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_Ip");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu31i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_Ip, BFu31ll_BFu31i_Ip)
//============================================================================


struct  BFu31ll_BFu31i_L  {
  __tsu64 v1:31;
  unsigned int v2:31;
  __tsi64 v3;
};
//SIG(1 BFu31ll_BFu31i_L) C1{ FL:31 Fi:31 FL}



static void Test_BFu31ll_BFu31i_L()
{
  {
    init_simple_test("BFu31ll_BFu31i_L");
    static STRUCT_IF_C BFu31ll_BFu31i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_L");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_L");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_L");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu31i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_L, BFu31ll_BFu31i_L)
//============================================================================


struct  BFu31ll_BFu31i_S  {
  __tsu64 v1:31;
  unsigned int v2:31;
  short v3;
};
//SIG(1 BFu31ll_BFu31i_S) C1{ FL:31 Fi:31 Fs}



static void Test_BFu31ll_BFu31i_S()
{
  {
    init_simple_test("BFu31ll_BFu31i_S");
    static STRUCT_IF_C BFu31ll_BFu31i_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_S");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_S");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_S");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu31i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_S, BFu31ll_BFu31i_S)
//============================================================================


struct  BFu31ll_BFu31i_Uc  {
  __tsu64 v1:31;
  unsigned int v2:31;
  unsigned char v3;
};
//SIG(1 BFu31ll_BFu31i_Uc) C1{ FL:31 Fi:31 Fc}



static void Test_BFu31ll_BFu31i_Uc()
{
  {
    init_simple_test("BFu31ll_BFu31i_Uc");
    static STRUCT_IF_C BFu31ll_BFu31i_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_Uc");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu31i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_Uc, BFu31ll_BFu31i_Uc)
//============================================================================


struct  BFu31ll_BFu31i_Ui  {
  __tsu64 v1:31;
  unsigned int v2:31;
  unsigned int v3;
};
//SIG(1 BFu31ll_BFu31i_Ui) C1{ FL:31 Fi:31 Fi}



static void Test_BFu31ll_BFu31i_Ui()
{
  {
    init_simple_test("BFu31ll_BFu31i_Ui");
    static STRUCT_IF_C BFu31ll_BFu31i_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_Ui");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu31i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_Ui, BFu31ll_BFu31i_Ui)
//============================================================================


struct  BFu31ll_BFu31i_Ul  {
  __tsu64 v1:31;
  unsigned int v2:31;
  __tsu64 v3;
};
//SIG(1 BFu31ll_BFu31i_Ul) C1{ FL:31 Fi:31 FL}



static void Test_BFu31ll_BFu31i_Ul()
{
  {
    init_simple_test("BFu31ll_BFu31i_Ul");
    static STRUCT_IF_C BFu31ll_BFu31i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_Ul");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu31i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_Ul, BFu31ll_BFu31i_Ul)
//============================================================================


struct  BFu31ll_BFu31i_Us  {
  __tsu64 v1:31;
  unsigned int v2:31;
  unsigned short v3;
};
//SIG(1 BFu31ll_BFu31i_Us) C1{ FL:31 Fi:31 Fs}



static void Test_BFu31ll_BFu31i_Us()
{
  {
    init_simple_test("BFu31ll_BFu31i_Us");
    static STRUCT_IF_C BFu31ll_BFu31i_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_Us");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_Us");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_Us");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu31i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_Us, BFu31ll_BFu31i_Us)
//============================================================================


struct  BFu31ll_BFu31i_Vp  {
  __tsu64 v1:31;
  unsigned int v2:31;
  void *v3;
};
//SIG(1 BFu31ll_BFu31i_Vp) C1{ FL:31 Fi:31 Fp}



static void Test_BFu31ll_BFu31i_Vp()
{
  {
    init_simple_test("BFu31ll_BFu31i_Vp");
    static STRUCT_IF_C BFu31ll_BFu31i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_Vp");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu31i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31i_Vp, BFu31ll_BFu31i_Vp)
//============================================================================


struct  BFu31ll_BFu31ll  {
  __tsu64 v1:31;
  __tsu64 v2:31;
};
//SIG(1 BFu31ll_BFu31ll) C1{ FL:31 FL:31}



static void Test_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll, BFu31ll_BFu31ll)
//============================================================================


struct  BFu31ll_BFu31ll_BFs31i  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  signed int v3:31;
};
//SIG(1 BFu31ll_BFu31ll_BFs31i) C1{ FL:31 FL:31 Fi:31}



static void Test_BFu31ll_BFu31ll_BFs31i()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFs31i");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFs31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFu31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFs31i, BFu31ll_BFu31ll_BFs31i)
//============================================================================


struct  BFu31ll_BFu31ll_BFs31i_BFs31i  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  signed int v3:31;
  signed int v4:31;
};
//SIG(1 BFu31ll_BFu31ll_BFs31i_BFs31i) C1{ FL:31 FL:31 Fi:31 Fi:31}



static void Test_BFu31ll_BFu31ll_BFs31i_BFs31i()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFs31i_BFs31i");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFs31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31ll_BFs31i_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFs31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFu31ll_BFs31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFu31ll_BFs31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFs31i_BFs31i, BFu31ll_BFu31ll_BFs31i_BFs31i)
//============================================================================


struct  BFu31ll_BFu31ll_BFs31i_BFs31ll  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  signed int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31ll_BFu31ll_BFs31i_BFs31ll) C1{ FL:31 FL:31 Fi:31 FL:31}



static void Test_BFu31ll_BFu31ll_BFs31i_BFs31ll()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFs31i_BFs31ll");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFs31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31ll_BFs31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFs31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31ll_BFu31ll_BFs31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFu31ll_BFs31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFs31i_BFs31ll, BFu31ll_BFu31ll_BFs31i_BFs31ll)
//============================================================================


struct  BFu31ll_BFu31ll_BFs31i_BFu31i  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  signed int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31ll_BFu31ll_BFs31i_BFu31i) C1{ FL:31 FL:31 Fi:31 Fi:31}



static void Test_BFu31ll_BFu31ll_BFs31i_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFs31i_BFu31i");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFs31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31ll_BFs31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFs31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFu31ll_BFs31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFs31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFs31i_BFu31i, BFu31ll_BFu31ll_BFs31i_BFu31i)
//============================================================================


struct  BFu31ll_BFu31ll_BFs31i_BFu31ll  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  signed int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31ll_BFu31ll_BFs31i_BFu31ll) C1{ FL:31 FL:31 Fi:31 FL:31}



static void Test_BFu31ll_BFu31ll_BFs31i_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFs31i_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFs31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31ll_BFs31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFs31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31ll_BFu31ll_BFs31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFs31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFs31i_BFu31ll, BFu31ll_BFu31ll_BFs31i_BFu31ll)
//============================================================================


struct  BFu31ll_BFu31ll_BFs31ll  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  signed __tsi64 v3:31;
};
//SIG(1 BFu31ll_BFu31ll_BFs31ll) C1{ FL:31 FL:31 FL:31}



static void Test_BFu31ll_BFu31ll_BFs31ll()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFs31ll");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFs31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFu31ll_BFu31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFs31ll, BFu31ll_BFu31ll_BFs31ll)
//============================================================================


struct  BFu31ll_BFu31ll_BFs31ll_BFs31i  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  signed __tsi64 v3:31;
  signed int v4:31;
};
//SIG(1 BFu31ll_BFu31ll_BFs31ll_BFs31i) C1{ FL:31 FL:31 FL:31 Fi:31}



static void Test_BFu31ll_BFu31ll_BFs31ll_BFs31i()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFs31ll_BFs31i");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFs31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31ll_BFs31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFs31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31ll_BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFu31ll_BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFu31ll_BFs31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFu31ll_BFs31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFs31ll_BFs31i, BFu31ll_BFu31ll_BFs31ll_BFs31i)
//============================================================================


struct  BFu31ll_BFu31ll_BFs31ll_BFs31ll  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  signed __tsi64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31ll_BFu31ll_BFs31ll_BFs31ll) C1{ FL:31 FL:31 FL:31 FL:31}



static void Test_BFu31ll_BFu31ll_BFs31ll_BFs31ll()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFs31ll_BFs31ll");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFs31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31ll_BFs31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFs31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31ll_BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFu31ll_BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFu31ll_BFu31ll_BFs31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_sll(1LL<<30), "BFu31ll_BFu31ll_BFs31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFs31ll_BFs31ll, BFu31ll_BFu31ll_BFs31ll_BFs31ll)
//============================================================================


struct  BFu31ll_BFu31ll_BFs31ll_BFu31i  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  signed __tsi64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31ll_BFu31ll_BFs31ll_BFu31i) C1{ FL:31 FL:31 FL:31 Fi:31}



static void Test_BFu31ll_BFu31ll_BFs31ll_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFs31ll_BFu31i");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFs31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31ll_BFs31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFs31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31ll_BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFu31ll_BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFu31ll_BFs31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFs31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFs31ll_BFu31i, BFu31ll_BFu31ll_BFs31ll_BFu31i)
//============================================================================


struct  BFu31ll_BFu31ll_BFs31ll_BFu31ll  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  signed __tsi64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31ll_BFu31ll_BFs31ll_BFu31ll) C1{ FL:31 FL:31 FL:31 FL:31}



static void Test_BFu31ll_BFu31ll_BFs31ll_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFs31ll_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFs31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31ll_BFs31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFs31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31ll_BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_sll(1LL<<30), "BFu31ll_BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFu31ll_BFu31ll_BFs31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFs31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFs31ll_BFu31ll, BFu31ll_BFu31ll_BFs31ll_BFu31ll)
//============================================================================


struct  BFu31ll_BFu31ll_BFu15i  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  unsigned int v3:15;
};
//SIG(1 BFu31ll_BFu31ll_BFu15i) C1{ FL:31 FL:31 Fi:15}



static void Test_BFu31ll_BFu31ll_BFu15i()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu15i");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31ll_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu31ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu15i, BFu31ll_BFu31ll_BFu15i)
//============================================================================


struct  BFu31ll_BFu31ll_BFu15ll  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  __tsu64 v3:15;
};
//SIG(1 BFu31ll_BFu31ll_BFu15ll) C1{ FL:31 FL:31 FL:15}



static void Test_BFu31ll_BFu31ll_BFu15ll()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu15ll");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 15, 1, "BFu31ll_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 15, hide_ull(1LL<<14), "BFu31ll_BFu31ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu15ll, BFu31ll_BFu31ll_BFu15ll)
//============================================================================


struct  BFu31ll_BFu31ll_BFu15s  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  unsigned short v3:15;
};
//SIG(1 BFu31ll_BFu31ll_BFu15s) C1{ FL:31 FL:31 Fs:15}



static void Test_BFu31ll_BFu31ll_BFu15s()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu15s");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31ll_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu31ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu15s, BFu31ll_BFu31ll_BFu15s)
//============================================================================


struct  BFu31ll_BFu31ll_BFu16i  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  unsigned int v3:16;
};
//SIG(1 BFu31ll_BFu31ll_BFu16i) C1{ FL:31 FL:31 Fi:16}



static void Test_BFu31ll_BFu31ll_BFu16i()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu16i");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31ll_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu31ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu16i, BFu31ll_BFu31ll_BFu16i)
//============================================================================


struct  BFu31ll_BFu31ll_BFu16ll  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  __tsu64 v3:16;
};
//SIG(1 BFu31ll_BFu31ll_BFu16ll) C1{ FL:31 FL:31 FL:16}



static void Test_BFu31ll_BFu31ll_BFu16ll()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu16ll");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 16, 1, "BFu31ll_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 16, hide_ull(1LL<<15), "BFu31ll_BFu31ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu16ll, BFu31ll_BFu31ll_BFu16ll)
//============================================================================


struct  BFu31ll_BFu31ll_BFu16s  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  unsigned short v3:16;
};
//SIG(1 BFu31ll_BFu31ll_BFu16s) C1{ FL:31 FL:31 Fs:16}



static void Test_BFu31ll_BFu31ll_BFu16s()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu16s");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31ll_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu31ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu16s, BFu31ll_BFu31ll_BFu16s)
//============================================================================


struct  BFu31ll_BFu31ll_BFu17i  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  unsigned int v3:17;
};
//SIG(1 BFu31ll_BFu31ll_BFu17i) C1{ FL:31 FL:31 Fi:17}



static void Test_BFu31ll_BFu31ll_BFu17i()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu17i");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31ll_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu31ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu17i, BFu31ll_BFu31ll_BFu17i)
//============================================================================


struct  BFu31ll_BFu31ll_BFu17ll  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  __tsu64 v3:17;
};
//SIG(1 BFu31ll_BFu31ll_BFu17ll) C1{ FL:31 FL:31 FL:17}



static void Test_BFu31ll_BFu31ll_BFu17ll()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu17ll");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 17, 1, "BFu31ll_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 17, hide_ull(1LL<<16), "BFu31ll_BFu31ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu17ll, BFu31ll_BFu31ll_BFu17ll)
//============================================================================


struct  BFu31ll_BFu31ll_BFu1c  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  unsigned char v3:1;
};
//SIG(1 BFu31ll_BFu31ll_BFu1c) C1{ FL:31 FL:31 Fc:1}



static void Test_BFu31ll_BFu31ll_BFu1c()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu1c");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu31ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu1c");
    set_bf_and_test(lv, v3, 7, 6, 1, 1, "BFu31ll_BFu31ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu1c, BFu31ll_BFu31ll_BFu1c)
//============================================================================


struct  BFu31ll_BFu31ll_BFu1i  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  unsigned int v3:1;
};
//SIG(1 BFu31ll_BFu31ll_BFu1i) C1{ FL:31 FL:31 Fi:1}



static void Test_BFu31ll_BFu31ll_BFu1i()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu1i");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu31ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu1i");
    set_bf_and_test(lv, v3, 7, 6, 1, 1, "BFu31ll_BFu31ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu1i, BFu31ll_BFu31ll_BFu1i)
//============================================================================


struct  BFu31ll_BFu31ll_BFu1ll  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  __tsu64 v3:1;
};
//SIG(1 BFu31ll_BFu31ll_BFu1ll) C1{ FL:31 FL:31 FL:1}



static void Test_BFu31ll_BFu31ll_BFu1ll()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu1ll");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu31ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v3, 7, 6, 1, 1, "BFu31ll_BFu31ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu1ll, BFu31ll_BFu31ll_BFu1ll)
//============================================================================


struct  BFu31ll_BFu31ll_BFu1s  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  unsigned short v3:1;
};
//SIG(1 BFu31ll_BFu31ll_BFu1s) C1{ FL:31 FL:31 Fs:1}



static void Test_BFu31ll_BFu31ll_BFu1s()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu1s");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu31ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu1s");
    set_bf_and_test(lv, v3, 7, 6, 1, 1, "BFu31ll_BFu31ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu1s, BFu31ll_BFu31ll_BFu1s)
//============================================================================


struct  BFu31ll_BFu31ll_BFu31i  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  unsigned int v3:31;
};
//SIG(1 BFu31ll_BFu31ll_BFu31i) C1{ FL:31 FL:31 Fi:31}



static void Test_BFu31ll_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu31i");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu31i, BFu31ll_BFu31ll_BFu31i)
//============================================================================


struct  BFu31ll_BFu31ll_BFu31i_BFs31i  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  unsigned int v3:31;
  signed int v4:31;
};
//SIG(1 BFu31ll_BFu31ll_BFu31i_BFs31i) C1{ FL:31 FL:31 Fi:31 Fi:31}



static void Test_BFu31ll_BFu31ll_BFu31i_BFs31i()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu31i_BFs31i");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu31i_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31ll_BFu31i_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu31i_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFu31ll_BFu31i_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFu31ll_BFu31i_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu31i_BFs31i, BFu31ll_BFu31ll_BFu31i_BFs31i)
//============================================================================


struct  BFu31ll_BFu31ll_BFu31i_BFs31ll  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  unsigned int v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31ll_BFu31ll_BFu31i_BFs31ll) C1{ FL:31 FL:31 Fi:31 FL:31}



static void Test_BFu31ll_BFu31ll_BFu31i_BFs31ll()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu31i_BFs31ll");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu31i_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31ll_BFu31i_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu31i_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31ll_BFu31ll_BFu31i_BFs31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_sll(1LL<<30), "BFu31ll_BFu31ll_BFu31i_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu31i_BFs31ll, BFu31ll_BFu31ll_BFu31i_BFs31ll)
//============================================================================


struct  BFu31ll_BFu31ll_BFu31i_BFu31i  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  unsigned int v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31ll_BFu31ll_BFu31i_BFu31i) C1{ FL:31 FL:31 Fi:31 Fi:31}



static void Test_BFu31ll_BFu31ll_BFu31i_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu31i_BFu31i");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu31i_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31ll_BFu31i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFu31ll_BFu31i_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu31i_BFu31i, BFu31ll_BFu31ll_BFu31i_BFu31i)
//============================================================================


struct  BFu31ll_BFu31ll_BFu31i_BFu31ll  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  unsigned int v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31ll_BFu31ll_BFu31i_BFu31ll) C1{ FL:31 FL:31 Fi:31 FL:31}



static void Test_BFu31ll_BFu31ll_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu31i_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu31i_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31ll_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, 1, "BFu31ll_BFu31ll_BFu31i_BFu31ll");
    set_bf_and_test(lv, v4, 11, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu31i_BFu31ll, BFu31ll_BFu31ll_BFu31i_BFu31ll)
//============================================================================


struct  BFu31ll_BFu31ll_BFu31ll  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFu31ll_BFu31ll_BFu31ll) C1{ FL:31 FL:31 FL:31}



static void Test_BFu31ll_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu31ll, BFu31ll_BFu31ll_BFu31ll)
//============================================================================


struct  BFu31ll_BFu31ll_BFu31ll_BFs31i  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  __tsu64 v3:31;
  signed int v4:31;
};
//SIG(1 BFu31ll_BFu31ll_BFu31ll_BFs31i) C1{ FL:31 FL:31 FL:31 Fi:31}



static void Test_BFu31ll_BFu31ll_BFu31ll_BFs31i()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu31ll_BFs31i");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu31ll_BFs31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31ll_BFu31ll_BFs31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu31ll_BFs31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31ll_BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFu31ll_BFu31ll_BFs31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_sll(1LL<<30), "BFu31ll_BFu31ll_BFu31ll_BFs31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu31ll_BFs31i, BFu31ll_BFu31ll_BFu31ll_BFs31i)
//============================================================================


struct  BFu31ll_BFu31ll_BFu31ll_BFs31ll  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  __tsu64 v3:31;
  signed __tsi64 v4:31;
};
//SIG(1 BFu31ll_BFu31ll_BFu31ll_BFs31ll) C1{ FL:31 FL:31 FL:31 FL:31}



static void Test_BFu31ll_BFu31ll_BFu31ll_BFs31ll()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu31ll_BFs31ll");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu31ll_BFs31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31ll_BFu31ll_BFs31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu31ll_BFs31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31ll_BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFu31ll_BFu31ll_BFu31ll_BFs31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_sll(1LL<<30), "BFu31ll_BFu31ll_BFu31ll_BFs31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu31ll_BFs31ll, BFu31ll_BFu31ll_BFu31ll_BFs31ll)
//============================================================================


struct  BFu31ll_BFu31ll_BFu31ll_BFu31i  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  __tsu64 v3:31;
  unsigned int v4:31;
};
//SIG(1 BFu31ll_BFu31ll_BFu31ll_BFu31i) C1{ FL:31 FL:31 FL:31 Fi:31}



static void Test_BFu31ll_BFu31ll_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu31ll_BFu31i");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu31ll_BFu31i lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31ll_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31ll_BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, 1, "BFu31ll_BFu31ll_BFu31ll_BFu31i");
    set_bf_and_test(lv, v4, 12, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu31ll_BFu31i, BFu31ll_BFu31ll_BFu31ll_BFu31i)
//============================================================================


struct  BFu31ll_BFu31ll_BFu31ll_BFu31ll  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  __tsu64 v3:31;
  __tsu64 v4:31;
};
//SIG(1 BFu31ll_BFu31ll_BFu31ll_BFu31ll) C1{ FL:31 FL:31 FL:31 FL:31}



static void Test_BFu31ll_BFu31ll_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31ll_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, 1, "BFu31ll_BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, 1, "BFu31ll_BFu31ll_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v4, 11, ABISELECT(7,5), 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu31ll_BFu31ll, BFu31ll_BFu31ll_BFu31ll_BFu31ll)
//============================================================================


struct  BFu31ll_BFu31ll_BFu32i  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  unsigned int v3:32;
};
//SIG(1 BFu31ll_BFu31ll_BFu32i) C1{ FL:31 FL:31 Fi:32}



static void Test_BFu31ll_BFu31ll_BFu32i()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu32i");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31ll_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu31ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu32i, BFu31ll_BFu31ll_BFu32i)
//============================================================================


struct  BFu31ll_BFu31ll_BFu32ll  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  __tsu64 v3:32;
};
//SIG(1 BFu31ll_BFu31ll_BFu32ll) C1{ FL:31 FL:31 FL:32}



static void Test_BFu31ll_BFu31ll_BFu32ll()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu32ll");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 32, 1, "BFu31ll_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 32, hide_ull(1LL<<31), "BFu31ll_BFu31ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu32ll, BFu31ll_BFu31ll_BFu32ll)
//============================================================================


struct  BFu31ll_BFu31ll_BFu33  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  __tsu64 v3:33;
};
//SIG(1 BFu31ll_BFu31ll_BFu33) C1{ FL:31 FL:31 FL:33}



static void Test_BFu31ll_BFu31ll_BFu33()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu33");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 33, 1, "BFu31ll_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 33, hide_ull(1LL<<32), "BFu31ll_BFu31ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu33, BFu31ll_BFu31ll_BFu33)
//============================================================================


struct  BFu31ll_BFu31ll_BFu7c  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  unsigned char v3:7;
};
//SIG(1 BFu31ll_BFu31ll_BFu7c) C1{ FL:31 FL:31 Fc:7}



static void Test_BFu31ll_BFu31ll_BFu7c()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu7c");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31ll_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu31ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu7c, BFu31ll_BFu31ll_BFu7c)
//============================================================================


struct  BFu31ll_BFu31ll_BFu7i  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  unsigned int v3:7;
};
//SIG(1 BFu31ll_BFu31ll_BFu7i) C1{ FL:31 FL:31 Fi:7}



static void Test_BFu31ll_BFu31ll_BFu7i()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu7i");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31ll_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu31ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu7i, BFu31ll_BFu31ll_BFu7i)
//============================================================================


struct  BFu31ll_BFu31ll_BFu7ll  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  __tsu64 v3:7;
};
//SIG(1 BFu31ll_BFu31ll_BFu7ll) C1{ FL:31 FL:31 FL:7}



static void Test_BFu31ll_BFu31ll_BFu7ll()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu7ll");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 7, 1, "BFu31ll_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 7, hide_ull(1LL<<6), "BFu31ll_BFu31ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu7ll, BFu31ll_BFu31ll_BFu7ll)
//============================================================================


struct  BFu31ll_BFu31ll_BFu7s  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  unsigned short v3:7;
};
//SIG(1 BFu31ll_BFu31ll_BFu7s) C1{ FL:31 FL:31 Fs:7}



static void Test_BFu31ll_BFu31ll_BFu7s()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu7s");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31ll_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu31ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu7s, BFu31ll_BFu31ll_BFu7s)
//============================================================================


struct  BFu31ll_BFu31ll_BFu8c  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  unsigned char v3:8;
};
//SIG(1 BFu31ll_BFu31ll_BFu8c) C1{ FL:31 FL:31 Fc:8}



static void Test_BFu31ll_BFu31ll_BFu8c()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu8c");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31ll_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu31ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu8c, BFu31ll_BFu31ll_BFu8c)
//============================================================================


struct  BFu31ll_BFu31ll_BFu8i  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  unsigned int v3:8;
};
//SIG(1 BFu31ll_BFu31ll_BFu8i) C1{ FL:31 FL:31 Fi:8}



static void Test_BFu31ll_BFu31ll_BFu8i()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu8i");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31ll_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu31ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu8i, BFu31ll_BFu31ll_BFu8i)
//============================================================================


struct  BFu31ll_BFu31ll_BFu8ll  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  __tsu64 v3:8;
};
//SIG(1 BFu31ll_BFu31ll_BFu8ll) C1{ FL:31 FL:31 FL:8}



static void Test_BFu31ll_BFu31ll_BFu8ll()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu8ll");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 8, 1, "BFu31ll_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 8, hide_ull(1LL<<7), "BFu31ll_BFu31ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu8ll, BFu31ll_BFu31ll_BFu8ll)
//============================================================================


struct  BFu31ll_BFu31ll_BFu8s  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  unsigned short v3:8;
};
//SIG(1 BFu31ll_BFu31ll_BFu8s) C1{ FL:31 FL:31 Fs:8}



static void Test_BFu31ll_BFu31ll_BFu8s()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu8s");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31ll_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu31ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu8s, BFu31ll_BFu31ll_BFu8s)
//============================================================================


struct  BFu31ll_BFu31ll_BFu9i  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  unsigned int v3:9;
};
//SIG(1 BFu31ll_BFu31ll_BFu9i) C1{ FL:31 FL:31 Fi:9}



static void Test_BFu31ll_BFu31ll_BFu9i()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu9i");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31ll_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu31ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu9i, BFu31ll_BFu31ll_BFu9i)
//============================================================================


struct  BFu31ll_BFu31ll_BFu9ll  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  __tsu64 v3:9;
};
//SIG(1 BFu31ll_BFu31ll_BFu9ll) C1{ FL:31 FL:31 FL:9}



static void Test_BFu31ll_BFu31ll_BFu9ll()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu9ll");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 9, 1, "BFu31ll_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,6), 9, hide_ull(1LL<<8), "BFu31ll_BFu31ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu9ll, BFu31ll_BFu31ll_BFu9ll)
//============================================================================


struct  BFu31ll_BFu31ll_BFu9s  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  unsigned short v3:9;
};
//SIG(1 BFu31ll_BFu31ll_BFu9s) C1{ FL:31 FL:31 Fs:9}



static void Test_BFu31ll_BFu31ll_BFu9s()
{
  {
    init_simple_test("BFu31ll_BFu31ll_BFu9s");
    static STRUCT_IF_C BFu31ll_BFu31ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31ll_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu31ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_BFu9s, BFu31ll_BFu31ll_BFu9s)
//============================================================================


struct  BFu31ll_BFu31ll_C  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  char v3;
};
//SIG(1 BFu31ll_BFu31ll_C) C1{ FL:31 FL:31 Fc}



static void Test_BFu31ll_BFu31ll_C()
{
  {
    init_simple_test("BFu31ll_BFu31ll_C");
    static STRUCT_IF_C BFu31ll_BFu31ll_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_C");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_C");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_C");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu31ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_C, BFu31ll_BFu31ll_C)
//============================================================================


struct  BFu31ll_BFu31ll_D  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  double v3;
};
//SIG(1 BFu31ll_BFu31ll_D) C1{ FL:31 FL:31 FL}



static void Test_BFu31ll_BFu31ll_D()
{
  {
    init_simple_test("BFu31ll_BFu31ll_D");
    static STRUCT_IF_C BFu31ll_BFu31ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_D");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_D");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_D");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu31ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_D, BFu31ll_BFu31ll_D)
//============================================================================


struct  BFu31ll_BFu31ll_F  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  float v3;
};
//SIG(1 BFu31ll_BFu31ll_F) C1{ FL:31 FL:31 Fi}



static void Test_BFu31ll_BFu31ll_F()
{
  {
    init_simple_test("BFu31ll_BFu31ll_F");
    static STRUCT_IF_C BFu31ll_BFu31ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_F");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_F");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_F");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu31ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_F, BFu31ll_BFu31ll_F)
//============================================================================


struct  BFu31ll_BFu31ll_I  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  int v3;
};
//SIG(1 BFu31ll_BFu31ll_I) C1{ FL:31 FL:31 Fi}



static void Test_BFu31ll_BFu31ll_I()
{
  {
    init_simple_test("BFu31ll_BFu31ll_I");
    static STRUCT_IF_C BFu31ll_BFu31ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_I");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_I");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_I");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu31ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_I, BFu31ll_BFu31ll_I)
//============================================================================


struct  BFu31ll_BFu31ll_Ip  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  int *v3;
};
//SIG(1 BFu31ll_BFu31ll_Ip) C1{ FL:31 FL:31 Fp}



static void Test_BFu31ll_BFu31ll_Ip()
{
  {
    init_simple_test("BFu31ll_BFu31ll_Ip");
    static STRUCT_IF_C BFu31ll_BFu31ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_Ip");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu31ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_Ip, BFu31ll_BFu31ll_Ip)
//============================================================================


struct  BFu31ll_BFu31ll_L  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  __tsi64 v3;
};
//SIG(1 BFu31ll_BFu31ll_L) C1{ FL:31 FL:31 FL}



static void Test_BFu31ll_BFu31ll_L()
{
  {
    init_simple_test("BFu31ll_BFu31ll_L");
    static STRUCT_IF_C BFu31ll_BFu31ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_L");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_L");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_L");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu31ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_L, BFu31ll_BFu31ll_L)
//============================================================================


struct  BFu31ll_BFu31ll_S  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  short v3;
};
//SIG(1 BFu31ll_BFu31ll_S) C1{ FL:31 FL:31 Fs}



static void Test_BFu31ll_BFu31ll_S()
{
  {
    init_simple_test("BFu31ll_BFu31ll_S");
    static STRUCT_IF_C BFu31ll_BFu31ll_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_S");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_S");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_S");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu31ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_S, BFu31ll_BFu31ll_S)
//============================================================================


struct  BFu31ll_BFu31ll_Uc  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  unsigned char v3;
};
//SIG(1 BFu31ll_BFu31ll_Uc) C1{ FL:31 FL:31 Fc}



static void Test_BFu31ll_BFu31ll_Uc()
{
  {
    init_simple_test("BFu31ll_BFu31ll_Uc");
    static STRUCT_IF_C BFu31ll_BFu31ll_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_Uc");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu31ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_Uc, BFu31ll_BFu31ll_Uc)
//============================================================================


struct  BFu31ll_BFu31ll_Ui  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  unsigned int v3;
};
//SIG(1 BFu31ll_BFu31ll_Ui) C1{ FL:31 FL:31 Fi}



static void Test_BFu31ll_BFu31ll_Ui()
{
  {
    init_simple_test("BFu31ll_BFu31ll_Ui");
    static STRUCT_IF_C BFu31ll_BFu31ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_Ui");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu31ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_Ui, BFu31ll_BFu31ll_Ui)
//============================================================================


struct  BFu31ll_BFu31ll_Ul  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  __tsu64 v3;
};
//SIG(1 BFu31ll_BFu31ll_Ul) C1{ FL:31 FL:31 FL}



static void Test_BFu31ll_BFu31ll_Ul()
{
  {
    init_simple_test("BFu31ll_BFu31ll_Ul");
    static STRUCT_IF_C BFu31ll_BFu31ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu31ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_Ul");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu31ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_Ul, BFu31ll_BFu31ll_Ul)
//============================================================================


struct  BFu31ll_BFu31ll_Us  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  unsigned short v3;
};
//SIG(1 BFu31ll_BFu31ll_Us) C1{ FL:31 FL:31 Fs}



static void Test_BFu31ll_BFu31ll_Us()
{
  {
    init_simple_test("BFu31ll_BFu31ll_Us");
    static STRUCT_IF_C BFu31ll_BFu31ll_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_Us");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_Us");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_Us");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu31ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_Us, BFu31ll_BFu31ll_Us)
//============================================================================


struct  BFu31ll_BFu31ll_Vp  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  void *v3;
};
//SIG(1 BFu31ll_BFu31ll_Vp) C1{ FL:31 FL:31 Fp}



static void Test_BFu31ll_BFu31ll_Vp()
{
  {
    init_simple_test("BFu31ll_BFu31ll_Vp");
    static STRUCT_IF_C BFu31ll_BFu31ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_Vp");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu31ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu31ll_Vp, BFu31ll_BFu31ll_Vp)
//============================================================================


struct  BFu31ll_BFu32i  {
  __tsu64 v1:31;
  unsigned int v2:32;
};
//SIG(1 BFu31ll_BFu32i) C1{ FL:31 Fi:32}



static void Test_BFu31ll_BFu32i()
{
  {
    init_simple_test("BFu31ll_BFu32i");
    static STRUCT_IF_C BFu31ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i, BFu31ll_BFu32i)
//============================================================================


struct  BFu31ll_BFu32i_BFu15i  {
  __tsu64 v1:31;
  unsigned int v2:32;
  unsigned int v3:15;
};
//SIG(1 BFu31ll_BFu32i_BFu15i) C1{ FL:31 Fi:32 Fi:15}



static void Test_BFu31ll_BFu32i_BFu15i()
{
  {
    init_simple_test("BFu31ll_BFu32i_BFu15i");
    static STRUCT_IF_C BFu31ll_BFu32i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31ll_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu32i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_BFu15i, BFu31ll_BFu32i_BFu15i)
//============================================================================


struct  BFu31ll_BFu32i_BFu15ll  {
  __tsu64 v1:31;
  unsigned int v2:32;
  __tsu64 v3:15;
};
//SIG(1 BFu31ll_BFu32i_BFu15ll) C1{ FL:31 Fi:32 FL:15}



static void Test_BFu31ll_BFu32i_BFu15ll()
{
  {
    init_simple_test("BFu31ll_BFu32i_BFu15ll");
    static STRUCT_IF_C BFu31ll_BFu32i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31ll_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu32i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_BFu15ll, BFu31ll_BFu32i_BFu15ll)
//============================================================================


struct  BFu31ll_BFu32i_BFu15s  {
  __tsu64 v1:31;
  unsigned int v2:32;
  unsigned short v3:15;
};
//SIG(1 BFu31ll_BFu32i_BFu15s) C1{ FL:31 Fi:32 Fs:15}



static void Test_BFu31ll_BFu32i_BFu15s()
{
  {
    init_simple_test("BFu31ll_BFu32i_BFu15s");
    static STRUCT_IF_C BFu31ll_BFu32i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31ll_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu32i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_BFu15s, BFu31ll_BFu32i_BFu15s)
//============================================================================


struct  BFu31ll_BFu32i_BFu16i  {
  __tsu64 v1:31;
  unsigned int v2:32;
  unsigned int v3:16;
};
//SIG(1 BFu31ll_BFu32i_BFu16i) C1{ FL:31 Fi:32 Fi:16}



static void Test_BFu31ll_BFu32i_BFu16i()
{
  {
    init_simple_test("BFu31ll_BFu32i_BFu16i");
    static STRUCT_IF_C BFu31ll_BFu32i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31ll_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu32i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_BFu16i, BFu31ll_BFu32i_BFu16i)
//============================================================================


struct  BFu31ll_BFu32i_BFu16ll  {
  __tsu64 v1:31;
  unsigned int v2:32;
  __tsu64 v3:16;
};
//SIG(1 BFu31ll_BFu32i_BFu16ll) C1{ FL:31 Fi:32 FL:16}



static void Test_BFu31ll_BFu32i_BFu16ll()
{
  {
    init_simple_test("BFu31ll_BFu32i_BFu16ll");
    static STRUCT_IF_C BFu31ll_BFu32i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31ll_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu32i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_BFu16ll, BFu31ll_BFu32i_BFu16ll)
//============================================================================


struct  BFu31ll_BFu32i_BFu16s  {
  __tsu64 v1:31;
  unsigned int v2:32;
  unsigned short v3:16;
};
//SIG(1 BFu31ll_BFu32i_BFu16s) C1{ FL:31 Fi:32 Fs:16}



static void Test_BFu31ll_BFu32i_BFu16s()
{
  {
    init_simple_test("BFu31ll_BFu32i_BFu16s");
    static STRUCT_IF_C BFu31ll_BFu32i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31ll_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu32i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_BFu16s, BFu31ll_BFu32i_BFu16s)
//============================================================================


struct  BFu31ll_BFu32i_BFu17i  {
  __tsu64 v1:31;
  unsigned int v2:32;
  unsigned int v3:17;
};
//SIG(1 BFu31ll_BFu32i_BFu17i) C1{ FL:31 Fi:32 Fi:17}



static void Test_BFu31ll_BFu32i_BFu17i()
{
  {
    init_simple_test("BFu31ll_BFu32i_BFu17i");
    static STRUCT_IF_C BFu31ll_BFu32i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31ll_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu32i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_BFu17i, BFu31ll_BFu32i_BFu17i)
//============================================================================


struct  BFu31ll_BFu32i_BFu17ll  {
  __tsu64 v1:31;
  unsigned int v2:32;
  __tsu64 v3:17;
};
//SIG(1 BFu31ll_BFu32i_BFu17ll) C1{ FL:31 Fi:32 FL:17}



static void Test_BFu31ll_BFu32i_BFu17ll()
{
  {
    init_simple_test("BFu31ll_BFu32i_BFu17ll");
    static STRUCT_IF_C BFu31ll_BFu32i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31ll_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu32i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_BFu17ll, BFu31ll_BFu32i_BFu17ll)
//============================================================================


struct  BFu31ll_BFu32i_BFu1c  {
  __tsu64 v1:31;
  unsigned int v2:32;
  unsigned char v3:1;
};
//SIG(1 BFu31ll_BFu32i_BFu1c) C1{ FL:31 Fi:32 Fc:1}



static void Test_BFu31ll_BFu32i_BFu1c()
{
  {
    init_simple_test("BFu31ll_BFu32i_BFu1c");
    static STRUCT_IF_C BFu31ll_BFu32i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu1c");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu31ll_BFu32i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_BFu1c, BFu31ll_BFu32i_BFu1c)
//============================================================================


struct  BFu31ll_BFu32i_BFu1i  {
  __tsu64 v1:31;
  unsigned int v2:32;
  unsigned int v3:1;
};
//SIG(1 BFu31ll_BFu32i_BFu1i) C1{ FL:31 Fi:32 Fi:1}



static void Test_BFu31ll_BFu32i_BFu1i()
{
  {
    init_simple_test("BFu31ll_BFu32i_BFu1i");
    static STRUCT_IF_C BFu31ll_BFu32i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu1i");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu31ll_BFu32i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_BFu1i, BFu31ll_BFu32i_BFu1i)
//============================================================================


struct  BFu31ll_BFu32i_BFu1ll  {
  __tsu64 v1:31;
  unsigned int v2:32;
  __tsu64 v3:1;
};
//SIG(1 BFu31ll_BFu32i_BFu1ll) C1{ FL:31 Fi:32 FL:1}



static void Test_BFu31ll_BFu32i_BFu1ll()
{
  {
    init_simple_test("BFu31ll_BFu32i_BFu1ll");
    static STRUCT_IF_C BFu31ll_BFu32i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu1ll");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu31ll_BFu32i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_BFu1ll, BFu31ll_BFu32i_BFu1ll)
//============================================================================


struct  BFu31ll_BFu32i_BFu1s  {
  __tsu64 v1:31;
  unsigned int v2:32;
  unsigned short v3:1;
};
//SIG(1 BFu31ll_BFu32i_BFu1s) C1{ FL:31 Fi:32 Fs:1}



static void Test_BFu31ll_BFu32i_BFu1s()
{
  {
    init_simple_test("BFu31ll_BFu32i_BFu1s");
    static STRUCT_IF_C BFu31ll_BFu32i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu1s");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu31ll_BFu32i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_BFu1s, BFu31ll_BFu32i_BFu1s)
//============================================================================


struct  BFu31ll_BFu32i_BFu31i  {
  __tsu64 v1:31;
  unsigned int v2:32;
  unsigned int v3:31;
};
//SIG(1 BFu31ll_BFu32i_BFu31i) C1{ FL:31 Fi:32 Fi:31}



static void Test_BFu31ll_BFu32i_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFu32i_BFu31i");
    static STRUCT_IF_C BFu31ll_BFu32i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_BFu31i, BFu31ll_BFu32i_BFu31i)
//============================================================================


struct  BFu31ll_BFu32i_BFu31ll  {
  __tsu64 v1:31;
  unsigned int v2:32;
  __tsu64 v3:31;
};
//SIG(1 BFu31ll_BFu32i_BFu31ll) C1{ FL:31 Fi:32 FL:31}



static void Test_BFu31ll_BFu32i_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFu32i_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFu32i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_BFu31ll, BFu31ll_BFu32i_BFu31ll)
//============================================================================


struct  BFu31ll_BFu32i_BFu32i  {
  __tsu64 v1:31;
  unsigned int v2:32;
  unsigned int v3:32;
};
//SIG(1 BFu31ll_BFu32i_BFu32i) C1{ FL:31 Fi:32 Fi:32}



static void Test_BFu31ll_BFu32i_BFu32i()
{
  {
    init_simple_test("BFu31ll_BFu32i_BFu32i");
    static STRUCT_IF_C BFu31ll_BFu32i_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31ll_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_BFu32i, BFu31ll_BFu32i_BFu32i)
//============================================================================


struct  BFu31ll_BFu32i_BFu32ll  {
  __tsu64 v1:31;
  unsigned int v2:32;
  __tsu64 v3:32;
};
//SIG(1 BFu31ll_BFu32i_BFu32ll) C1{ FL:31 Fi:32 FL:32}



static void Test_BFu31ll_BFu32i_BFu32ll()
{
  {
    init_simple_test("BFu31ll_BFu32i_BFu32ll");
    static STRUCT_IF_C BFu31ll_BFu32i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31ll_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_BFu32ll, BFu31ll_BFu32i_BFu32ll)
//============================================================================


struct  BFu31ll_BFu32i_BFu33  {
  __tsu64 v1:31;
  unsigned int v2:32;
  __tsu64 v3:33;
};
//SIG(1 BFu31ll_BFu32i_BFu33) C1{ FL:31 Fi:32 FL:33}



static void Test_BFu31ll_BFu32i_BFu33()
{
  {
    init_simple_test("BFu31ll_BFu32i_BFu33");
    static STRUCT_IF_C BFu31ll_BFu32i_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu32i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu31ll_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu31ll_BFu32i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_BFu33, BFu31ll_BFu32i_BFu33)
//============================================================================


struct  BFu31ll_BFu32i_BFu7c  {
  __tsu64 v1:31;
  unsigned int v2:32;
  unsigned char v3:7;
};
//SIG(1 BFu31ll_BFu32i_BFu7c) C1{ FL:31 Fi:32 Fc:7}



static void Test_BFu31ll_BFu32i_BFu7c()
{
  {
    init_simple_test("BFu31ll_BFu32i_BFu7c");
    static STRUCT_IF_C BFu31ll_BFu32i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31ll_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu32i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_BFu7c, BFu31ll_BFu32i_BFu7c)
//============================================================================


struct  BFu31ll_BFu32i_BFu7i  {
  __tsu64 v1:31;
  unsigned int v2:32;
  unsigned int v3:7;
};
//SIG(1 BFu31ll_BFu32i_BFu7i) C1{ FL:31 Fi:32 Fi:7}



static void Test_BFu31ll_BFu32i_BFu7i()
{
  {
    init_simple_test("BFu31ll_BFu32i_BFu7i");
    static STRUCT_IF_C BFu31ll_BFu32i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31ll_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu32i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_BFu7i, BFu31ll_BFu32i_BFu7i)
//============================================================================


struct  BFu31ll_BFu32i_BFu7ll  {
  __tsu64 v1:31;
  unsigned int v2:32;
  __tsu64 v3:7;
};
//SIG(1 BFu31ll_BFu32i_BFu7ll) C1{ FL:31 Fi:32 FL:7}



static void Test_BFu31ll_BFu32i_BFu7ll()
{
  {
    init_simple_test("BFu31ll_BFu32i_BFu7ll");
    static STRUCT_IF_C BFu31ll_BFu32i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31ll_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu32i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_BFu7ll, BFu31ll_BFu32i_BFu7ll)
//============================================================================


struct  BFu31ll_BFu32i_BFu7s  {
  __tsu64 v1:31;
  unsigned int v2:32;
  unsigned short v3:7;
};
//SIG(1 BFu31ll_BFu32i_BFu7s) C1{ FL:31 Fi:32 Fs:7}



static void Test_BFu31ll_BFu32i_BFu7s()
{
  {
    init_simple_test("BFu31ll_BFu32i_BFu7s");
    static STRUCT_IF_C BFu31ll_BFu32i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31ll_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu32i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_BFu7s, BFu31ll_BFu32i_BFu7s)
//============================================================================


struct  BFu31ll_BFu32i_BFu8c  {
  __tsu64 v1:31;
  unsigned int v2:32;
  unsigned char v3:8;
};
//SIG(1 BFu31ll_BFu32i_BFu8c) C1{ FL:31 Fi:32 Fc:8}



static void Test_BFu31ll_BFu32i_BFu8c()
{
  {
    init_simple_test("BFu31ll_BFu32i_BFu8c");
    static STRUCT_IF_C BFu31ll_BFu32i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31ll_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu32i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_BFu8c, BFu31ll_BFu32i_BFu8c)
//============================================================================


struct  BFu31ll_BFu32i_BFu8i  {
  __tsu64 v1:31;
  unsigned int v2:32;
  unsigned int v3:8;
};
//SIG(1 BFu31ll_BFu32i_BFu8i) C1{ FL:31 Fi:32 Fi:8}



static void Test_BFu31ll_BFu32i_BFu8i()
{
  {
    init_simple_test("BFu31ll_BFu32i_BFu8i");
    static STRUCT_IF_C BFu31ll_BFu32i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31ll_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu32i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_BFu8i, BFu31ll_BFu32i_BFu8i)
//============================================================================


struct  BFu31ll_BFu32i_BFu8ll  {
  __tsu64 v1:31;
  unsigned int v2:32;
  __tsu64 v3:8;
};
//SIG(1 BFu31ll_BFu32i_BFu8ll) C1{ FL:31 Fi:32 FL:8}



static void Test_BFu31ll_BFu32i_BFu8ll()
{
  {
    init_simple_test("BFu31ll_BFu32i_BFu8ll");
    static STRUCT_IF_C BFu31ll_BFu32i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31ll_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu32i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_BFu8ll, BFu31ll_BFu32i_BFu8ll)
//============================================================================


struct  BFu31ll_BFu32i_BFu8s  {
  __tsu64 v1:31;
  unsigned int v2:32;
  unsigned short v3:8;
};
//SIG(1 BFu31ll_BFu32i_BFu8s) C1{ FL:31 Fi:32 Fs:8}



static void Test_BFu31ll_BFu32i_BFu8s()
{
  {
    init_simple_test("BFu31ll_BFu32i_BFu8s");
    static STRUCT_IF_C BFu31ll_BFu32i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31ll_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu32i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_BFu8s, BFu31ll_BFu32i_BFu8s)
//============================================================================


struct  BFu31ll_BFu32i_BFu9i  {
  __tsu64 v1:31;
  unsigned int v2:32;
  unsigned int v3:9;
};
//SIG(1 BFu31ll_BFu32i_BFu9i) C1{ FL:31 Fi:32 Fi:9}



static void Test_BFu31ll_BFu32i_BFu9i()
{
  {
    init_simple_test("BFu31ll_BFu32i_BFu9i");
    static STRUCT_IF_C BFu31ll_BFu32i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31ll_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu32i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_BFu9i, BFu31ll_BFu32i_BFu9i)
//============================================================================


struct  BFu31ll_BFu32i_BFu9ll  {
  __tsu64 v1:31;
  unsigned int v2:32;
  __tsu64 v3:9;
};
//SIG(1 BFu31ll_BFu32i_BFu9ll) C1{ FL:31 Fi:32 FL:9}



static void Test_BFu31ll_BFu32i_BFu9ll()
{
  {
    init_simple_test("BFu31ll_BFu32i_BFu9ll");
    static STRUCT_IF_C BFu31ll_BFu32i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31ll_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu32i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_BFu9ll, BFu31ll_BFu32i_BFu9ll)
//============================================================================


struct  BFu31ll_BFu32i_BFu9s  {
  __tsu64 v1:31;
  unsigned int v2:32;
  unsigned short v3:9;
};
//SIG(1 BFu31ll_BFu32i_BFu9s) C1{ FL:31 Fi:32 Fs:9}



static void Test_BFu31ll_BFu32i_BFu9s()
{
  {
    init_simple_test("BFu31ll_BFu32i_BFu9s");
    static STRUCT_IF_C BFu31ll_BFu32i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31ll_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu32i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_BFu9s, BFu31ll_BFu32i_BFu9s)
//============================================================================


struct  BFu31ll_BFu32i_C  {
  __tsu64 v1:31;
  unsigned int v2:32;
  char v3;
};
//SIG(1 BFu31ll_BFu32i_C) C1{ FL:31 Fi:32 Fc}



static void Test_BFu31ll_BFu32i_C()
{
  {
    init_simple_test("BFu31ll_BFu32i_C");
    static STRUCT_IF_C BFu31ll_BFu32i_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_C");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_C");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_C");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu32i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_C, BFu31ll_BFu32i_C)
//============================================================================


struct  BFu31ll_BFu32i_D  {
  __tsu64 v1:31;
  unsigned int v2:32;
  double v3;
};
//SIG(1 BFu31ll_BFu32i_D) C1{ FL:31 Fi:32 FL}



static void Test_BFu31ll_BFu32i_D()
{
  {
    init_simple_test("BFu31ll_BFu32i_D");
    static STRUCT_IF_C BFu31ll_BFu32i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu32i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_D");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_D");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_D");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu32i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_D, BFu31ll_BFu32i_D)
//============================================================================


struct  BFu31ll_BFu32i_F  {
  __tsu64 v1:31;
  unsigned int v2:32;
  float v3;
};
//SIG(1 BFu31ll_BFu32i_F) C1{ FL:31 Fi:32 Fi}



static void Test_BFu31ll_BFu32i_F()
{
  {
    init_simple_test("BFu31ll_BFu32i_F");
    static STRUCT_IF_C BFu31ll_BFu32i_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_F");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_F");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_F");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu32i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_F, BFu31ll_BFu32i_F)
//============================================================================


struct  BFu31ll_BFu32i_I  {
  __tsu64 v1:31;
  unsigned int v2:32;
  int v3;
};
//SIG(1 BFu31ll_BFu32i_I) C1{ FL:31 Fi:32 Fi}



static void Test_BFu31ll_BFu32i_I()
{
  {
    init_simple_test("BFu31ll_BFu32i_I");
    static STRUCT_IF_C BFu31ll_BFu32i_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_I");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_I");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_I");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu32i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_I, BFu31ll_BFu32i_I)
//============================================================================


struct  BFu31ll_BFu32i_Ip  {
  __tsu64 v1:31;
  unsigned int v2:32;
  int *v3;
};
//SIG(1 BFu31ll_BFu32i_Ip) C1{ FL:31 Fi:32 Fp}



static void Test_BFu31ll_BFu32i_Ip()
{
  {
    init_simple_test("BFu31ll_BFu32i_Ip");
    static STRUCT_IF_C BFu31ll_BFu32i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_Ip");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu32i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_Ip, BFu31ll_BFu32i_Ip)
//============================================================================


struct  BFu31ll_BFu32i_L  {
  __tsu64 v1:31;
  unsigned int v2:32;
  __tsi64 v3;
};
//SIG(1 BFu31ll_BFu32i_L) C1{ FL:31 Fi:32 FL}



static void Test_BFu31ll_BFu32i_L()
{
  {
    init_simple_test("BFu31ll_BFu32i_L");
    static STRUCT_IF_C BFu31ll_BFu32i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu32i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_L");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_L");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_L");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu32i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_L, BFu31ll_BFu32i_L)
//============================================================================


struct  BFu31ll_BFu32i_S  {
  __tsu64 v1:31;
  unsigned int v2:32;
  short v3;
};
//SIG(1 BFu31ll_BFu32i_S) C1{ FL:31 Fi:32 Fs}



static void Test_BFu31ll_BFu32i_S()
{
  {
    init_simple_test("BFu31ll_BFu32i_S");
    static STRUCT_IF_C BFu31ll_BFu32i_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_S");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_S");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_S");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu32i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_S, BFu31ll_BFu32i_S)
//============================================================================


struct  BFu31ll_BFu32i_Uc  {
  __tsu64 v1:31;
  unsigned int v2:32;
  unsigned char v3;
};
//SIG(1 BFu31ll_BFu32i_Uc) C1{ FL:31 Fi:32 Fc}



static void Test_BFu31ll_BFu32i_Uc()
{
  {
    init_simple_test("BFu31ll_BFu32i_Uc");
    static STRUCT_IF_C BFu31ll_BFu32i_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_Uc");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu32i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_Uc, BFu31ll_BFu32i_Uc)
//============================================================================


struct  BFu31ll_BFu32i_Ui  {
  __tsu64 v1:31;
  unsigned int v2:32;
  unsigned int v3;
};
//SIG(1 BFu31ll_BFu32i_Ui) C1{ FL:31 Fi:32 Fi}



static void Test_BFu31ll_BFu32i_Ui()
{
  {
    init_simple_test("BFu31ll_BFu32i_Ui");
    static STRUCT_IF_C BFu31ll_BFu32i_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_Ui");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu32i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_Ui, BFu31ll_BFu32i_Ui)
//============================================================================


struct  BFu31ll_BFu32i_Ul  {
  __tsu64 v1:31;
  unsigned int v2:32;
  __tsu64 v3;
};
//SIG(1 BFu31ll_BFu32i_Ul) C1{ FL:31 Fi:32 FL}



static void Test_BFu31ll_BFu32i_Ul()
{
  {
    init_simple_test("BFu31ll_BFu32i_Ul");
    static STRUCT_IF_C BFu31ll_BFu32i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu32i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_Ul");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu32i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_Ul, BFu31ll_BFu32i_Ul)
//============================================================================


struct  BFu31ll_BFu32i_Us  {
  __tsu64 v1:31;
  unsigned int v2:32;
  unsigned short v3;
};
//SIG(1 BFu31ll_BFu32i_Us) C1{ FL:31 Fi:32 Fs}



static void Test_BFu31ll_BFu32i_Us()
{
  {
    init_simple_test("BFu31ll_BFu32i_Us");
    static STRUCT_IF_C BFu31ll_BFu32i_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_Us");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_Us");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_Us");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu32i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_Us, BFu31ll_BFu32i_Us)
//============================================================================


struct  BFu31ll_BFu32i_Vp  {
  __tsu64 v1:31;
  unsigned int v2:32;
  void *v3;
};
//SIG(1 BFu31ll_BFu32i_Vp) C1{ FL:31 Fi:32 Fp}



static void Test_BFu31ll_BFu32i_Vp()
{
  {
    init_simple_test("BFu31ll_BFu32i_Vp");
    static STRUCT_IF_C BFu31ll_BFu32i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_Vp");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu32i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32i_Vp, BFu31ll_BFu32i_Vp)
//============================================================================


struct  BFu31ll_BFu32ll  {
  __tsu64 v1:31;
  __tsu64 v2:32;
};
//SIG(1 BFu31ll_BFu32ll) C1{ FL:31 FL:32}



static void Test_BFu31ll_BFu32ll()
{
  {
    init_simple_test("BFu31ll_BFu32ll");
    static STRUCT_IF_C BFu31ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll, BFu31ll_BFu32ll)
//============================================================================


struct  BFu31ll_BFu32ll_BFu15i  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  unsigned int v3:15;
};
//SIG(1 BFu31ll_BFu32ll_BFu15i) C1{ FL:31 FL:32 Fi:15}



static void Test_BFu31ll_BFu32ll_BFu15i()
{
  {
    init_simple_test("BFu31ll_BFu32ll_BFu15i");
    static STRUCT_IF_C BFu31ll_BFu32ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31ll_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu32ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_BFu15i, BFu31ll_BFu32ll_BFu15i)
//============================================================================


struct  BFu31ll_BFu32ll_BFu15ll  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  __tsu64 v3:15;
};
//SIG(1 BFu31ll_BFu32ll_BFu15ll) C1{ FL:31 FL:32 FL:15}



static void Test_BFu31ll_BFu32ll_BFu15ll()
{
  {
    init_simple_test("BFu31ll_BFu32ll_BFu15ll");
    static STRUCT_IF_C BFu31ll_BFu32ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, 1, "BFu31ll_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, hide_ull(1LL<<14), "BFu31ll_BFu32ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_BFu15ll, BFu31ll_BFu32ll_BFu15ll)
//============================================================================


struct  BFu31ll_BFu32ll_BFu15s  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  unsigned short v3:15;
};
//SIG(1 BFu31ll_BFu32ll_BFu15s) C1{ FL:31 FL:32 Fs:15}



static void Test_BFu31ll_BFu32ll_BFu15s()
{
  {
    init_simple_test("BFu31ll_BFu32ll_BFu15s");
    static STRUCT_IF_C BFu31ll_BFu32ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31ll_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu32ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_BFu15s, BFu31ll_BFu32ll_BFu15s)
//============================================================================


struct  BFu31ll_BFu32ll_BFu16i  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  unsigned int v3:16;
};
//SIG(1 BFu31ll_BFu32ll_BFu16i) C1{ FL:31 FL:32 Fi:16}



static void Test_BFu31ll_BFu32ll_BFu16i()
{
  {
    init_simple_test("BFu31ll_BFu32ll_BFu16i");
    static STRUCT_IF_C BFu31ll_BFu32ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31ll_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu32ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_BFu16i, BFu31ll_BFu32ll_BFu16i)
//============================================================================


struct  BFu31ll_BFu32ll_BFu16ll  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  __tsu64 v3:16;
};
//SIG(1 BFu31ll_BFu32ll_BFu16ll) C1{ FL:31 FL:32 FL:16}



static void Test_BFu31ll_BFu32ll_BFu16ll()
{
  {
    init_simple_test("BFu31ll_BFu32ll_BFu16ll");
    static STRUCT_IF_C BFu31ll_BFu32ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, 1, "BFu31ll_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, hide_ull(1LL<<15), "BFu31ll_BFu32ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_BFu16ll, BFu31ll_BFu32ll_BFu16ll)
//============================================================================


struct  BFu31ll_BFu32ll_BFu16s  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  unsigned short v3:16;
};
//SIG(1 BFu31ll_BFu32ll_BFu16s) C1{ FL:31 FL:32 Fs:16}



static void Test_BFu31ll_BFu32ll_BFu16s()
{
  {
    init_simple_test("BFu31ll_BFu32ll_BFu16s");
    static STRUCT_IF_C BFu31ll_BFu32ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31ll_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu32ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_BFu16s, BFu31ll_BFu32ll_BFu16s)
//============================================================================


struct  BFu31ll_BFu32ll_BFu17i  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  unsigned int v3:17;
};
//SIG(1 BFu31ll_BFu32ll_BFu17i) C1{ FL:31 FL:32 Fi:17}



static void Test_BFu31ll_BFu32ll_BFu17i()
{
  {
    init_simple_test("BFu31ll_BFu32ll_BFu17i");
    static STRUCT_IF_C BFu31ll_BFu32ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31ll_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu32ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_BFu17i, BFu31ll_BFu32ll_BFu17i)
//============================================================================


struct  BFu31ll_BFu32ll_BFu17ll  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  __tsu64 v3:17;
};
//SIG(1 BFu31ll_BFu32ll_BFu17ll) C1{ FL:31 FL:32 FL:17}



static void Test_BFu31ll_BFu32ll_BFu17ll()
{
  {
    init_simple_test("BFu31ll_BFu32ll_BFu17ll");
    static STRUCT_IF_C BFu31ll_BFu32ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, 1, "BFu31ll_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, hide_ull(1LL<<16), "BFu31ll_BFu32ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_BFu17ll, BFu31ll_BFu32ll_BFu17ll)
//============================================================================


struct  BFu31ll_BFu32ll_BFu1c  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  unsigned char v3:1;
};
//SIG(1 BFu31ll_BFu32ll_BFu1c) C1{ FL:31 FL:32 Fc:1}



static void Test_BFu31ll_BFu32ll_BFu1c()
{
  {
    init_simple_test("BFu31ll_BFu32ll_BFu1c");
    static STRUCT_IF_C BFu31ll_BFu32ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu32ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu1c");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu31ll_BFu32ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_BFu1c, BFu31ll_BFu32ll_BFu1c)
//============================================================================


struct  BFu31ll_BFu32ll_BFu1i  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  unsigned int v3:1;
};
//SIG(1 BFu31ll_BFu32ll_BFu1i) C1{ FL:31 FL:32 Fi:1}



static void Test_BFu31ll_BFu32ll_BFu1i()
{
  {
    init_simple_test("BFu31ll_BFu32ll_BFu1i");
    static STRUCT_IF_C BFu31ll_BFu32ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu32ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu1i");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu31ll_BFu32ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_BFu1i, BFu31ll_BFu32ll_BFu1i)
//============================================================================


struct  BFu31ll_BFu32ll_BFu1ll  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  __tsu64 v3:1;
};
//SIG(1 BFu31ll_BFu32ll_BFu1ll) C1{ FL:31 FL:32 FL:1}



static void Test_BFu31ll_BFu32ll_BFu1ll()
{
  {
    init_simple_test("BFu31ll_BFu32ll_BFu1ll");
    static STRUCT_IF_C BFu31ll_BFu32ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu32ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu31ll_BFu32ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_BFu1ll, BFu31ll_BFu32ll_BFu1ll)
//============================================================================


struct  BFu31ll_BFu32ll_BFu1s  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  unsigned short v3:1;
};
//SIG(1 BFu31ll_BFu32ll_BFu1s) C1{ FL:31 FL:32 Fs:1}



static void Test_BFu31ll_BFu32ll_BFu1s()
{
  {
    init_simple_test("BFu31ll_BFu32ll_BFu1s");
    static STRUCT_IF_C BFu31ll_BFu32ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu32ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu1s");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu31ll_BFu32ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_BFu1s, BFu31ll_BFu32ll_BFu1s)
//============================================================================


struct  BFu31ll_BFu32ll_BFu31i  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  unsigned int v3:31;
};
//SIG(1 BFu31ll_BFu32ll_BFu31i) C1{ FL:31 FL:32 Fi:31}



static void Test_BFu31ll_BFu32ll_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFu32ll_BFu31i");
    static STRUCT_IF_C BFu31ll_BFu32ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_BFu31i, BFu31ll_BFu32ll_BFu31i)
//============================================================================


struct  BFu31ll_BFu32ll_BFu31ll  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  __tsu64 v3:31;
};
//SIG(1 BFu31ll_BFu32ll_BFu31ll) C1{ FL:31 FL:32 FL:31}



static void Test_BFu31ll_BFu32ll_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFu32ll_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFu32ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu31ll_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_BFu31ll, BFu31ll_BFu32ll_BFu31ll)
//============================================================================


struct  BFu31ll_BFu32ll_BFu32i  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  unsigned int v3:32;
};
//SIG(1 BFu31ll_BFu32ll_BFu32i) C1{ FL:31 FL:32 Fi:32}



static void Test_BFu31ll_BFu32ll_BFu32i()
{
  {
    init_simple_test("BFu31ll_BFu32ll_BFu32i");
    static STRUCT_IF_C BFu31ll_BFu32ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31ll_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_BFu32i, BFu31ll_BFu32ll_BFu32i)
//============================================================================


struct  BFu31ll_BFu32ll_BFu32ll  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  __tsu64 v3:32;
};
//SIG(1 BFu31ll_BFu32ll_BFu32ll) C1{ FL:31 FL:32 FL:32}



static void Test_BFu31ll_BFu32ll_BFu32ll()
{
  {
    init_simple_test("BFu31ll_BFu32ll_BFu32ll");
    static STRUCT_IF_C BFu31ll_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, 1, "BFu31ll_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_BFu32ll, BFu31ll_BFu32ll_BFu32ll)
//============================================================================


struct  BFu31ll_BFu32ll_BFu33  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  __tsu64 v3:33;
};
//SIG(1 BFu31ll_BFu32ll_BFu33) C1{ FL:31 FL:32 FL:33}



static void Test_BFu31ll_BFu32ll_BFu33()
{
  {
    init_simple_test("BFu31ll_BFu32ll_BFu33");
    static STRUCT_IF_C BFu31ll_BFu32ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, 1, "BFu31ll_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu31ll_BFu32ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_BFu33, BFu31ll_BFu32ll_BFu33)
//============================================================================


struct  BFu31ll_BFu32ll_BFu7c  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  unsigned char v3:7;
};
//SIG(1 BFu31ll_BFu32ll_BFu7c) C1{ FL:31 FL:32 Fc:7}



static void Test_BFu31ll_BFu32ll_BFu7c()
{
  {
    init_simple_test("BFu31ll_BFu32ll_BFu7c");
    static STRUCT_IF_C BFu31ll_BFu32ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31ll_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu32ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_BFu7c, BFu31ll_BFu32ll_BFu7c)
//============================================================================


struct  BFu31ll_BFu32ll_BFu7i  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  unsigned int v3:7;
};
//SIG(1 BFu31ll_BFu32ll_BFu7i) C1{ FL:31 FL:32 Fi:7}



static void Test_BFu31ll_BFu32ll_BFu7i()
{
  {
    init_simple_test("BFu31ll_BFu32ll_BFu7i");
    static STRUCT_IF_C BFu31ll_BFu32ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31ll_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu32ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_BFu7i, BFu31ll_BFu32ll_BFu7i)
//============================================================================


struct  BFu31ll_BFu32ll_BFu7ll  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  __tsu64 v3:7;
};
//SIG(1 BFu31ll_BFu32ll_BFu7ll) C1{ FL:31 FL:32 FL:7}



static void Test_BFu31ll_BFu32ll_BFu7ll()
{
  {
    init_simple_test("BFu31ll_BFu32ll_BFu7ll");
    static STRUCT_IF_C BFu31ll_BFu32ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, 1, "BFu31ll_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, hide_ull(1LL<<6), "BFu31ll_BFu32ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_BFu7ll, BFu31ll_BFu32ll_BFu7ll)
//============================================================================


struct  BFu31ll_BFu32ll_BFu7s  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  unsigned short v3:7;
};
//SIG(1 BFu31ll_BFu32ll_BFu7s) C1{ FL:31 FL:32 Fs:7}



static void Test_BFu31ll_BFu32ll_BFu7s()
{
  {
    init_simple_test("BFu31ll_BFu32ll_BFu7s");
    static STRUCT_IF_C BFu31ll_BFu32ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31ll_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu32ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_BFu7s, BFu31ll_BFu32ll_BFu7s)
//============================================================================


struct  BFu31ll_BFu32ll_BFu8c  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  unsigned char v3:8;
};
//SIG(1 BFu31ll_BFu32ll_BFu8c) C1{ FL:31 FL:32 Fc:8}



static void Test_BFu31ll_BFu32ll_BFu8c()
{
  {
    init_simple_test("BFu31ll_BFu32ll_BFu8c");
    static STRUCT_IF_C BFu31ll_BFu32ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31ll_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu32ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_BFu8c, BFu31ll_BFu32ll_BFu8c)
//============================================================================


struct  BFu31ll_BFu32ll_BFu8i  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  unsigned int v3:8;
};
//SIG(1 BFu31ll_BFu32ll_BFu8i) C1{ FL:31 FL:32 Fi:8}



static void Test_BFu31ll_BFu32ll_BFu8i()
{
  {
    init_simple_test("BFu31ll_BFu32ll_BFu8i");
    static STRUCT_IF_C BFu31ll_BFu32ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31ll_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu32ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_BFu8i, BFu31ll_BFu32ll_BFu8i)
//============================================================================


struct  BFu31ll_BFu32ll_BFu8ll  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  __tsu64 v3:8;
};
//SIG(1 BFu31ll_BFu32ll_BFu8ll) C1{ FL:31 FL:32 FL:8}



static void Test_BFu31ll_BFu32ll_BFu8ll()
{
  {
    init_simple_test("BFu31ll_BFu32ll_BFu8ll");
    static STRUCT_IF_C BFu31ll_BFu32ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, 1, "BFu31ll_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, hide_ull(1LL<<7), "BFu31ll_BFu32ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_BFu8ll, BFu31ll_BFu32ll_BFu8ll)
//============================================================================


struct  BFu31ll_BFu32ll_BFu8s  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  unsigned short v3:8;
};
//SIG(1 BFu31ll_BFu32ll_BFu8s) C1{ FL:31 FL:32 Fs:8}



static void Test_BFu31ll_BFu32ll_BFu8s()
{
  {
    init_simple_test("BFu31ll_BFu32ll_BFu8s");
    static STRUCT_IF_C BFu31ll_BFu32ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31ll_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu32ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_BFu8s, BFu31ll_BFu32ll_BFu8s)
//============================================================================


struct  BFu31ll_BFu32ll_BFu9i  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  unsigned int v3:9;
};
//SIG(1 BFu31ll_BFu32ll_BFu9i) C1{ FL:31 FL:32 Fi:9}



static void Test_BFu31ll_BFu32ll_BFu9i()
{
  {
    init_simple_test("BFu31ll_BFu32ll_BFu9i");
    static STRUCT_IF_C BFu31ll_BFu32ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31ll_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu32ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_BFu9i, BFu31ll_BFu32ll_BFu9i)
//============================================================================


struct  BFu31ll_BFu32ll_BFu9ll  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  __tsu64 v3:9;
};
//SIG(1 BFu31ll_BFu32ll_BFu9ll) C1{ FL:31 FL:32 FL:9}



static void Test_BFu31ll_BFu32ll_BFu9ll()
{
  {
    init_simple_test("BFu31ll_BFu32ll_BFu9ll");
    static STRUCT_IF_C BFu31ll_BFu32ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, 1, "BFu31ll_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, hide_ull(1LL<<8), "BFu31ll_BFu32ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_BFu9ll, BFu31ll_BFu32ll_BFu9ll)
//============================================================================


struct  BFu31ll_BFu32ll_BFu9s  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  unsigned short v3:9;
};
//SIG(1 BFu31ll_BFu32ll_BFu9s) C1{ FL:31 FL:32 Fs:9}



static void Test_BFu31ll_BFu32ll_BFu9s()
{
  {
    init_simple_test("BFu31ll_BFu32ll_BFu9s");
    static STRUCT_IF_C BFu31ll_BFu32ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31ll_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu32ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_BFu9s, BFu31ll_BFu32ll_BFu9s)
//============================================================================


struct  BFu31ll_BFu32ll_C  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  char v3;
};
//SIG(1 BFu31ll_BFu32ll_C) C1{ FL:31 FL:32 Fc}



static void Test_BFu31ll_BFu32ll_C()
{
  {
    init_simple_test("BFu31ll_BFu32ll_C");
    static STRUCT_IF_C BFu31ll_BFu32ll_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_C");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_C");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_C");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu32ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_C, BFu31ll_BFu32ll_C)
//============================================================================


struct  BFu31ll_BFu32ll_D  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  double v3;
};
//SIG(1 BFu31ll_BFu32ll_D) C1{ FL:31 FL:32 FL}



static void Test_BFu31ll_BFu32ll_D()
{
  {
    init_simple_test("BFu31ll_BFu32ll_D");
    static STRUCT_IF_C BFu31ll_BFu32ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu32ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_D");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_D");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_D");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu32ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_D, BFu31ll_BFu32ll_D)
//============================================================================


struct  BFu31ll_BFu32ll_F  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  float v3;
};
//SIG(1 BFu31ll_BFu32ll_F) C1{ FL:31 FL:32 Fi}



static void Test_BFu31ll_BFu32ll_F()
{
  {
    init_simple_test("BFu31ll_BFu32ll_F");
    static STRUCT_IF_C BFu31ll_BFu32ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_F");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_F");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_F");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu32ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_F, BFu31ll_BFu32ll_F)
//============================================================================


struct  BFu31ll_BFu32ll_I  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  int v3;
};
//SIG(1 BFu31ll_BFu32ll_I) C1{ FL:31 FL:32 Fi}



static void Test_BFu31ll_BFu32ll_I()
{
  {
    init_simple_test("BFu31ll_BFu32ll_I");
    static STRUCT_IF_C BFu31ll_BFu32ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_I");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_I");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_I");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu32ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_I, BFu31ll_BFu32ll_I)
//============================================================================


struct  BFu31ll_BFu32ll_Ip  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  int *v3;
};
//SIG(1 BFu31ll_BFu32ll_Ip) C1{ FL:31 FL:32 Fp}



static void Test_BFu31ll_BFu32ll_Ip()
{
  {
    init_simple_test("BFu31ll_BFu32ll_Ip");
    static STRUCT_IF_C BFu31ll_BFu32ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_Ip");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu32ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_Ip, BFu31ll_BFu32ll_Ip)
//============================================================================


struct  BFu31ll_BFu32ll_L  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  __tsi64 v3;
};
//SIG(1 BFu31ll_BFu32ll_L) C1{ FL:31 FL:32 FL}



static void Test_BFu31ll_BFu32ll_L()
{
  {
    init_simple_test("BFu31ll_BFu32ll_L");
    static STRUCT_IF_C BFu31ll_BFu32ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu32ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_L");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_L");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_L");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu32ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_L, BFu31ll_BFu32ll_L)
//============================================================================


struct  BFu31ll_BFu32ll_S  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  short v3;
};
//SIG(1 BFu31ll_BFu32ll_S) C1{ FL:31 FL:32 Fs}



static void Test_BFu31ll_BFu32ll_S()
{
  {
    init_simple_test("BFu31ll_BFu32ll_S");
    static STRUCT_IF_C BFu31ll_BFu32ll_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_S");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_S");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_S");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu32ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_S, BFu31ll_BFu32ll_S)
//============================================================================


struct  BFu31ll_BFu32ll_Uc  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  unsigned char v3;
};
//SIG(1 BFu31ll_BFu32ll_Uc) C1{ FL:31 FL:32 Fc}



static void Test_BFu31ll_BFu32ll_Uc()
{
  {
    init_simple_test("BFu31ll_BFu32ll_Uc");
    static STRUCT_IF_C BFu31ll_BFu32ll_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_Uc");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu32ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_Uc, BFu31ll_BFu32ll_Uc)
//============================================================================


struct  BFu31ll_BFu32ll_Ui  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  unsigned int v3;
};
//SIG(1 BFu31ll_BFu32ll_Ui) C1{ FL:31 FL:32 Fi}



static void Test_BFu31ll_BFu32ll_Ui()
{
  {
    init_simple_test("BFu31ll_BFu32ll_Ui");
    static STRUCT_IF_C BFu31ll_BFu32ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_Ui");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu32ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_Ui, BFu31ll_BFu32ll_Ui)
//============================================================================


struct  BFu31ll_BFu32ll_Ul  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  __tsu64 v3;
};
//SIG(1 BFu31ll_BFu32ll_Ul) C1{ FL:31 FL:32 FL}



static void Test_BFu31ll_BFu32ll_Ul()
{
  {
    init_simple_test("BFu31ll_BFu32ll_Ul");
    static STRUCT_IF_C BFu31ll_BFu32ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu32ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_Ul");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu32ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_Ul, BFu31ll_BFu32ll_Ul)
//============================================================================


struct  BFu31ll_BFu32ll_Us  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  unsigned short v3;
};
//SIG(1 BFu31ll_BFu32ll_Us) C1{ FL:31 FL:32 Fs}



static void Test_BFu31ll_BFu32ll_Us()
{
  {
    init_simple_test("BFu31ll_BFu32ll_Us");
    static STRUCT_IF_C BFu31ll_BFu32ll_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_Us");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_Us");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_Us");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu32ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_Us, BFu31ll_BFu32ll_Us)
//============================================================================


struct  BFu31ll_BFu32ll_Vp  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  void *v3;
};
//SIG(1 BFu31ll_BFu32ll_Vp) C1{ FL:31 FL:32 Fp}



static void Test_BFu31ll_BFu32ll_Vp()
{
  {
    init_simple_test("BFu31ll_BFu32ll_Vp");
    static STRUCT_IF_C BFu31ll_BFu32ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_Vp");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu32ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu32ll_Vp, BFu31ll_BFu32ll_Vp)
//============================================================================


struct  BFu31ll_BFu33  {
  __tsu64 v1:31;
  __tsu64 v2:33;
};
//SIG(1 BFu31ll_BFu33) C1{ FL:31 FL:33}



static void Test_BFu31ll_BFu33()
{
  {
    init_simple_test("BFu31ll_BFu33");
    static STRUCT_IF_C BFu31ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33, BFu31ll_BFu33)
//============================================================================


struct  BFu31ll_BFu33_BFu15i  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  unsigned int v3:15;
};
//SIG(1 BFu31ll_BFu33_BFu15i) C1{ FL:31 FL:33 Fi:15}



static void Test_BFu31ll_BFu33_BFu15i()
{
  {
    init_simple_test("BFu31ll_BFu33_BFu15i");
    static STRUCT_IF_C BFu31ll_BFu33_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31ll_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu33_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_BFu15i, BFu31ll_BFu33_BFu15i)
//============================================================================


struct  BFu31ll_BFu33_BFu15ll  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  __tsu64 v3:15;
};
//SIG(1 BFu31ll_BFu33_BFu15ll) C1{ FL:31 FL:33 FL:15}



static void Test_BFu31ll_BFu33_BFu15ll()
{
  {
    init_simple_test("BFu31ll_BFu33_BFu15ll");
    static STRUCT_IF_C BFu31ll_BFu33_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31ll_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu33_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_BFu15ll, BFu31ll_BFu33_BFu15ll)
//============================================================================


struct  BFu31ll_BFu33_BFu15s  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  unsigned short v3:15;
};
//SIG(1 BFu31ll_BFu33_BFu15s) C1{ FL:31 FL:33 Fs:15}



static void Test_BFu31ll_BFu33_BFu15s()
{
  {
    init_simple_test("BFu31ll_BFu33_BFu15s");
    static STRUCT_IF_C BFu31ll_BFu33_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu31ll_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu33_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_BFu15s, BFu31ll_BFu33_BFu15s)
//============================================================================


struct  BFu31ll_BFu33_BFu16i  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  unsigned int v3:16;
};
//SIG(1 BFu31ll_BFu33_BFu16i) C1{ FL:31 FL:33 Fi:16}



static void Test_BFu31ll_BFu33_BFu16i()
{
  {
    init_simple_test("BFu31ll_BFu33_BFu16i");
    static STRUCT_IF_C BFu31ll_BFu33_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31ll_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu33_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_BFu16i, BFu31ll_BFu33_BFu16i)
//============================================================================


struct  BFu31ll_BFu33_BFu16ll  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  __tsu64 v3:16;
};
//SIG(1 BFu31ll_BFu33_BFu16ll) C1{ FL:31 FL:33 FL:16}



static void Test_BFu31ll_BFu33_BFu16ll()
{
  {
    init_simple_test("BFu31ll_BFu33_BFu16ll");
    static STRUCT_IF_C BFu31ll_BFu33_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31ll_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu33_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_BFu16ll, BFu31ll_BFu33_BFu16ll)
//============================================================================


struct  BFu31ll_BFu33_BFu16s  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  unsigned short v3:16;
};
//SIG(1 BFu31ll_BFu33_BFu16s) C1{ FL:31 FL:33 Fs:16}



static void Test_BFu31ll_BFu33_BFu16s()
{
  {
    init_simple_test("BFu31ll_BFu33_BFu16s");
    static STRUCT_IF_C BFu31ll_BFu33_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu31ll_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu33_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_BFu16s, BFu31ll_BFu33_BFu16s)
//============================================================================


struct  BFu31ll_BFu33_BFu17i  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  unsigned int v3:17;
};
//SIG(1 BFu31ll_BFu33_BFu17i) C1{ FL:31 FL:33 Fi:17}



static void Test_BFu31ll_BFu33_BFu17i()
{
  {
    init_simple_test("BFu31ll_BFu33_BFu17i");
    static STRUCT_IF_C BFu31ll_BFu33_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31ll_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu33_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_BFu17i, BFu31ll_BFu33_BFu17i)
//============================================================================


struct  BFu31ll_BFu33_BFu17ll  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  __tsu64 v3:17;
};
//SIG(1 BFu31ll_BFu33_BFu17ll) C1{ FL:31 FL:33 FL:17}



static void Test_BFu31ll_BFu33_BFu17ll()
{
  {
    init_simple_test("BFu31ll_BFu33_BFu17ll");
    static STRUCT_IF_C BFu31ll_BFu33_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu31ll_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu33_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_BFu17ll, BFu31ll_BFu33_BFu17ll)
//============================================================================


struct  BFu31ll_BFu33_BFu1c  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  unsigned char v3:1;
};
//SIG(1 BFu31ll_BFu33_BFu1c) C1{ FL:31 FL:33 Fc:1}



static void Test_BFu31ll_BFu33_BFu1c()
{
  {
    init_simple_test("BFu31ll_BFu33_BFu1c");
    static STRUCT_IF_C BFu31ll_BFu33_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_BFu1c");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu1c");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu31ll_BFu33_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_BFu1c, BFu31ll_BFu33_BFu1c)
//============================================================================


struct  BFu31ll_BFu33_BFu1i  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  unsigned int v3:1;
};
//SIG(1 BFu31ll_BFu33_BFu1i) C1{ FL:31 FL:33 Fi:1}



static void Test_BFu31ll_BFu33_BFu1i()
{
  {
    init_simple_test("BFu31ll_BFu33_BFu1i");
    static STRUCT_IF_C BFu31ll_BFu33_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_BFu1i");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu1i");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu31ll_BFu33_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_BFu1i, BFu31ll_BFu33_BFu1i)
//============================================================================


struct  BFu31ll_BFu33_BFu1ll  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  __tsu64 v3:1;
};
//SIG(1 BFu31ll_BFu33_BFu1ll) C1{ FL:31 FL:33 FL:1}



static void Test_BFu31ll_BFu33_BFu1ll()
{
  {
    init_simple_test("BFu31ll_BFu33_BFu1ll");
    static STRUCT_IF_C BFu31ll_BFu33_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu1ll");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu31ll_BFu33_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_BFu1ll, BFu31ll_BFu33_BFu1ll)
//============================================================================


struct  BFu31ll_BFu33_BFu1s  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  unsigned short v3:1;
};
//SIG(1 BFu31ll_BFu33_BFu1s) C1{ FL:31 FL:33 Fs:1}



static void Test_BFu31ll_BFu33_BFu1s()
{
  {
    init_simple_test("BFu31ll_BFu33_BFu1s");
    static STRUCT_IF_C BFu31ll_BFu33_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_BFu1s");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu1s");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu31ll_BFu33_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_BFu1s, BFu31ll_BFu33_BFu1s)
//============================================================================


struct  BFu31ll_BFu33_BFu31i  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  unsigned int v3:31;
};
//SIG(1 BFu31ll_BFu33_BFu31i) C1{ FL:31 FL:33 Fi:31}



static void Test_BFu31ll_BFu33_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFu33_BFu31i");
    static STRUCT_IF_C BFu31ll_BFu33_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_BFu31i, BFu31ll_BFu33_BFu31i)
//============================================================================


struct  BFu31ll_BFu33_BFu31ll  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  __tsu64 v3:31;
};
//SIG(1 BFu31ll_BFu33_BFu31ll) C1{ FL:31 FL:33 FL:31}



static void Test_BFu31ll_BFu33_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFu33_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFu33_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_BFu31ll, BFu31ll_BFu33_BFu31ll)
//============================================================================


struct  BFu31ll_BFu33_BFu32i  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  unsigned int v3:32;
};
//SIG(1 BFu31ll_BFu33_BFu32i) C1{ FL:31 FL:33 Fi:32}



static void Test_BFu31ll_BFu33_BFu32i()
{
  {
    init_simple_test("BFu31ll_BFu33_BFu32i");
    static STRUCT_IF_C BFu31ll_BFu33_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31ll_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu33_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_BFu32i, BFu31ll_BFu33_BFu32i)
//============================================================================


struct  BFu31ll_BFu33_BFu32ll  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  __tsu64 v3:32;
};
//SIG(1 BFu31ll_BFu33_BFu32ll) C1{ FL:31 FL:33 FL:32}



static void Test_BFu31ll_BFu33_BFu32ll()
{
  {
    init_simple_test("BFu31ll_BFu33_BFu32ll");
    static STRUCT_IF_C BFu31ll_BFu33_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31ll_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu33_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_BFu32ll, BFu31ll_BFu33_BFu32ll)
//============================================================================


struct  BFu31ll_BFu33_BFu33  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  __tsu64 v3:33;
};
//SIG(1 BFu31ll_BFu33_BFu33) C1{ FL:31 FL:33 FL:33}



static void Test_BFu31ll_BFu33_BFu33()
{
  {
    init_simple_test("BFu31ll_BFu33_BFu33");
    static STRUCT_IF_C BFu31ll_BFu33_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu33_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_BFu33");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu31ll_BFu33_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_BFu33, BFu31ll_BFu33_BFu33)
//============================================================================


struct  BFu31ll_BFu33_BFu7c  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  unsigned char v3:7;
};
//SIG(1 BFu31ll_BFu33_BFu7c) C1{ FL:31 FL:33 Fc:7}



static void Test_BFu31ll_BFu33_BFu7c()
{
  {
    init_simple_test("BFu31ll_BFu33_BFu7c");
    static STRUCT_IF_C BFu31ll_BFu33_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31ll_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu33_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_BFu7c, BFu31ll_BFu33_BFu7c)
//============================================================================


struct  BFu31ll_BFu33_BFu7i  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  unsigned int v3:7;
};
//SIG(1 BFu31ll_BFu33_BFu7i) C1{ FL:31 FL:33 Fi:7}



static void Test_BFu31ll_BFu33_BFu7i()
{
  {
    init_simple_test("BFu31ll_BFu33_BFu7i");
    static STRUCT_IF_C BFu31ll_BFu33_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31ll_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu33_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_BFu7i, BFu31ll_BFu33_BFu7i)
//============================================================================


struct  BFu31ll_BFu33_BFu7ll  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  __tsu64 v3:7;
};
//SIG(1 BFu31ll_BFu33_BFu7ll) C1{ FL:31 FL:33 FL:7}



static void Test_BFu31ll_BFu33_BFu7ll()
{
  {
    init_simple_test("BFu31ll_BFu33_BFu7ll");
    static STRUCT_IF_C BFu31ll_BFu33_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31ll_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu33_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_BFu7ll, BFu31ll_BFu33_BFu7ll)
//============================================================================


struct  BFu31ll_BFu33_BFu7s  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  unsigned short v3:7;
};
//SIG(1 BFu31ll_BFu33_BFu7s) C1{ FL:31 FL:33 Fs:7}



static void Test_BFu31ll_BFu33_BFu7s()
{
  {
    init_simple_test("BFu31ll_BFu33_BFu7s");
    static STRUCT_IF_C BFu31ll_BFu33_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu31ll_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu33_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_BFu7s, BFu31ll_BFu33_BFu7s)
//============================================================================


struct  BFu31ll_BFu33_BFu8c  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  unsigned char v3:8;
};
//SIG(1 BFu31ll_BFu33_BFu8c) C1{ FL:31 FL:33 Fc:8}



static void Test_BFu31ll_BFu33_BFu8c()
{
  {
    init_simple_test("BFu31ll_BFu33_BFu8c");
    static STRUCT_IF_C BFu31ll_BFu33_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31ll_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu33_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_BFu8c, BFu31ll_BFu33_BFu8c)
//============================================================================


struct  BFu31ll_BFu33_BFu8i  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  unsigned int v3:8;
};
//SIG(1 BFu31ll_BFu33_BFu8i) C1{ FL:31 FL:33 Fi:8}



static void Test_BFu31ll_BFu33_BFu8i()
{
  {
    init_simple_test("BFu31ll_BFu33_BFu8i");
    static STRUCT_IF_C BFu31ll_BFu33_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31ll_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu33_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_BFu8i, BFu31ll_BFu33_BFu8i)
//============================================================================


struct  BFu31ll_BFu33_BFu8ll  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  __tsu64 v3:8;
};
//SIG(1 BFu31ll_BFu33_BFu8ll) C1{ FL:31 FL:33 FL:8}



static void Test_BFu31ll_BFu33_BFu8ll()
{
  {
    init_simple_test("BFu31ll_BFu33_BFu8ll");
    static STRUCT_IF_C BFu31ll_BFu33_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31ll_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu33_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_BFu8ll, BFu31ll_BFu33_BFu8ll)
//============================================================================


struct  BFu31ll_BFu33_BFu8s  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  unsigned short v3:8;
};
//SIG(1 BFu31ll_BFu33_BFu8s) C1{ FL:31 FL:33 Fs:8}



static void Test_BFu31ll_BFu33_BFu8s()
{
  {
    init_simple_test("BFu31ll_BFu33_BFu8s");
    static STRUCT_IF_C BFu31ll_BFu33_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu31ll_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu33_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_BFu8s, BFu31ll_BFu33_BFu8s)
//============================================================================


struct  BFu31ll_BFu33_BFu9i  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  unsigned int v3:9;
};
//SIG(1 BFu31ll_BFu33_BFu9i) C1{ FL:31 FL:33 Fi:9}



static void Test_BFu31ll_BFu33_BFu9i()
{
  {
    init_simple_test("BFu31ll_BFu33_BFu9i");
    static STRUCT_IF_C BFu31ll_BFu33_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31ll_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu33_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_BFu9i, BFu31ll_BFu33_BFu9i)
//============================================================================


struct  BFu31ll_BFu33_BFu9ll  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  __tsu64 v3:9;
};
//SIG(1 BFu31ll_BFu33_BFu9ll) C1{ FL:31 FL:33 FL:9}



static void Test_BFu31ll_BFu33_BFu9ll()
{
  {
    init_simple_test("BFu31ll_BFu33_BFu9ll");
    static STRUCT_IF_C BFu31ll_BFu33_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31ll_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu33_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_BFu9ll, BFu31ll_BFu33_BFu9ll)
//============================================================================


struct  BFu31ll_BFu33_BFu9s  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  unsigned short v3:9;
};
//SIG(1 BFu31ll_BFu33_BFu9s) C1{ FL:31 FL:33 Fs:9}



static void Test_BFu31ll_BFu33_BFu9s()
{
  {
    init_simple_test("BFu31ll_BFu33_BFu9s");
    static STRUCT_IF_C BFu31ll_BFu33_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu31ll_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu33_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_BFu9s, BFu31ll_BFu33_BFu9s)
//============================================================================


struct  BFu31ll_BFu33_C  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  char v3;
};
//SIG(1 BFu31ll_BFu33_C) C1{ FL:31 FL:33 Fc}



static void Test_BFu31ll_BFu33_C()
{
  {
    init_simple_test("BFu31ll_BFu33_C");
    static STRUCT_IF_C BFu31ll_BFu33_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_C");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_C");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_C");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu33_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_C, BFu31ll_BFu33_C)
//============================================================================


struct  BFu31ll_BFu33_D  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  double v3;
};
//SIG(1 BFu31ll_BFu33_D) C1{ FL:31 FL:33 FL}



static void Test_BFu31ll_BFu33_D()
{
  {
    init_simple_test("BFu31ll_BFu33_D");
    static STRUCT_IF_C BFu31ll_BFu33_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu33_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_D");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_D");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_D");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu33_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_D, BFu31ll_BFu33_D)
//============================================================================


struct  BFu31ll_BFu33_F  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  float v3;
};
//SIG(1 BFu31ll_BFu33_F) C1{ FL:31 FL:33 Fi}



static void Test_BFu31ll_BFu33_F()
{
  {
    init_simple_test("BFu31ll_BFu33_F");
    static STRUCT_IF_C BFu31ll_BFu33_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_F");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_F");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_F");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu33_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_F, BFu31ll_BFu33_F)
//============================================================================


struct  BFu31ll_BFu33_I  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  int v3;
};
//SIG(1 BFu31ll_BFu33_I) C1{ FL:31 FL:33 Fi}



static void Test_BFu31ll_BFu33_I()
{
  {
    init_simple_test("BFu31ll_BFu33_I");
    static STRUCT_IF_C BFu31ll_BFu33_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_I");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_I");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_I");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu33_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_I, BFu31ll_BFu33_I)
//============================================================================


struct  BFu31ll_BFu33_Ip  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  int *v3;
};
//SIG(1 BFu31ll_BFu33_Ip) C1{ FL:31 FL:33 Fp}



static void Test_BFu31ll_BFu33_Ip()
{
  {
    init_simple_test("BFu31ll_BFu33_Ip");
    static STRUCT_IF_C BFu31ll_BFu33_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_Ip");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_Ip");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_Ip");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu33_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_Ip, BFu31ll_BFu33_Ip)
//============================================================================


struct  BFu31ll_BFu33_L  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  __tsi64 v3;
};
//SIG(1 BFu31ll_BFu33_L) C1{ FL:31 FL:33 FL}



static void Test_BFu31ll_BFu33_L()
{
  {
    init_simple_test("BFu31ll_BFu33_L");
    static STRUCT_IF_C BFu31ll_BFu33_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu33_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_L");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_L");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_L");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu33_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_L, BFu31ll_BFu33_L)
//============================================================================


struct  BFu31ll_BFu33_S  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  short v3;
};
//SIG(1 BFu31ll_BFu33_S) C1{ FL:31 FL:33 Fs}



static void Test_BFu31ll_BFu33_S()
{
  {
    init_simple_test("BFu31ll_BFu33_S");
    static STRUCT_IF_C BFu31ll_BFu33_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_S");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_S");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_S");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu33_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_S, BFu31ll_BFu33_S)
//============================================================================


struct  BFu31ll_BFu33_Uc  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  unsigned char v3;
};
//SIG(1 BFu31ll_BFu33_Uc) C1{ FL:31 FL:33 Fc}



static void Test_BFu31ll_BFu33_Uc()
{
  {
    init_simple_test("BFu31ll_BFu33_Uc");
    static STRUCT_IF_C BFu31ll_BFu33_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_Uc");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_Uc");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_Uc");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu33_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_Uc, BFu31ll_BFu33_Uc)
//============================================================================


struct  BFu31ll_BFu33_Ui  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  unsigned int v3;
};
//SIG(1 BFu31ll_BFu33_Ui) C1{ FL:31 FL:33 Fi}



static void Test_BFu31ll_BFu33_Ui()
{
  {
    init_simple_test("BFu31ll_BFu33_Ui");
    static STRUCT_IF_C BFu31ll_BFu33_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_Ui");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_Ui");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_Ui");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu33_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_Ui, BFu31ll_BFu33_Ui)
//============================================================================


struct  BFu31ll_BFu33_Ul  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  __tsu64 v3;
};
//SIG(1 BFu31ll_BFu33_Ul) C1{ FL:31 FL:33 FL}



static void Test_BFu31ll_BFu33_Ul()
{
  {
    init_simple_test("BFu31ll_BFu33_Ul");
    static STRUCT_IF_C BFu31ll_BFu33_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu33_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_Ul");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_Ul");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_Ul");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu33_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_Ul, BFu31ll_BFu33_Ul)
//============================================================================


struct  BFu31ll_BFu33_Us  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  unsigned short v3;
};
//SIG(1 BFu31ll_BFu33_Us) C1{ FL:31 FL:33 Fs}



static void Test_BFu31ll_BFu33_Us()
{
  {
    init_simple_test("BFu31ll_BFu33_Us");
    static STRUCT_IF_C BFu31ll_BFu33_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_Us");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_Us");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_Us");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu33_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_Us, BFu31ll_BFu33_Us)
//============================================================================


struct  BFu31ll_BFu33_Vp  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  void *v3;
};
//SIG(1 BFu31ll_BFu33_Vp) C1{ FL:31 FL:33 Fp}



static void Test_BFu31ll_BFu33_Vp()
{
  {
    init_simple_test("BFu31ll_BFu33_Vp");
    static STRUCT_IF_C BFu31ll_BFu33_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_Vp");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_Vp");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_Vp");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu33_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu33_Vp, BFu31ll_BFu33_Vp)
//============================================================================


struct  BFu31ll_BFu7c  {
  __tsu64 v1:31;
  unsigned char v2:7;
};
//SIG(1 BFu31ll_BFu7c) C1{ FL:31 Fc:7}



static void Test_BFu31ll_BFu7c()
{
  {
    init_simple_test("BFu31ll_BFu7c");
    static STRUCT_IF_C BFu31ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c, BFu31ll_BFu7c)
//============================================================================


struct  BFu31ll_BFu7c_BFu15i  {
  __tsu64 v1:31;
  unsigned char v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu31ll_BFu7c_BFu15i) C1{ FL:31 Fc:7 Fi:15}



static void Test_BFu31ll_BFu7c_BFu15i()
{
  {
    init_simple_test("BFu31ll_BFu7c_BFu15i");
    static STRUCT_IF_C BFu31ll_BFu7c_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 4, 7, 15, 1, "BFu31ll_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 4, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu7c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_BFu15i, BFu31ll_BFu7c_BFu15i)
//============================================================================


struct  BFu31ll_BFu7c_BFu15ll  {
  __tsu64 v1:31;
  unsigned char v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu31ll_BFu7c_BFu15ll) C1{ FL:31 Fc:7 FL:15}



static void Test_BFu31ll_BFu7c_BFu15ll()
{
  {
    init_simple_test("BFu31ll_BFu7c_BFu15ll");
    static STRUCT_IF_C BFu31ll_BFu7c_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 4, 7, 15, 1, "BFu31ll_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 4, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu7c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_BFu15ll, BFu31ll_BFu7c_BFu15ll)
//============================================================================


struct  BFu31ll_BFu7c_BFu15s  {
  __tsu64 v1:31;
  unsigned char v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu31ll_BFu7c_BFu15s) C1{ FL:31 Fc:7 Fs:15}



static void Test_BFu31ll_BFu7c_BFu15s()
{
  {
    init_simple_test("BFu31ll_BFu7c_BFu15s");
    static STRUCT_IF_C BFu31ll_BFu7c_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31ll_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu7c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_BFu15s, BFu31ll_BFu7c_BFu15s)
//============================================================================


struct  BFu31ll_BFu7c_BFu16i  {
  __tsu64 v1:31;
  unsigned char v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu31ll_BFu7c_BFu16i) C1{ FL:31 Fc:7 Fi:16}



static void Test_BFu31ll_BFu7c_BFu16i()
{
  {
    init_simple_test("BFu31ll_BFu7c_BFu16i");
    static STRUCT_IF_C BFu31ll_BFu7c_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 4, 7, 16, 1, "BFu31ll_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 4, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu7c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_BFu16i, BFu31ll_BFu7c_BFu16i)
//============================================================================


struct  BFu31ll_BFu7c_BFu16ll  {
  __tsu64 v1:31;
  unsigned char v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu31ll_BFu7c_BFu16ll) C1{ FL:31 Fc:7 FL:16}



static void Test_BFu31ll_BFu7c_BFu16ll()
{
  {
    init_simple_test("BFu31ll_BFu7c_BFu16ll");
    static STRUCT_IF_C BFu31ll_BFu7c_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 4, 7, 16, 1, "BFu31ll_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 4, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu7c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_BFu16ll, BFu31ll_BFu7c_BFu16ll)
//============================================================================


struct  BFu31ll_BFu7c_BFu16s  {
  __tsu64 v1:31;
  unsigned char v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu31ll_BFu7c_BFu16s) C1{ FL:31 Fc:7 Fs:16}



static void Test_BFu31ll_BFu7c_BFu16s()
{
  {
    init_simple_test("BFu31ll_BFu7c_BFu16s");
    static STRUCT_IF_C BFu31ll_BFu7c_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31ll_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu7c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_BFu16s, BFu31ll_BFu7c_BFu16s)
//============================================================================


struct  BFu31ll_BFu7c_BFu17i  {
  __tsu64 v1:31;
  unsigned char v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu31ll_BFu7c_BFu17i) C1{ FL:31 Fc:7 Fi:17}



static void Test_BFu31ll_BFu7c_BFu17i()
{
  {
    init_simple_test("BFu31ll_BFu7c_BFu17i");
    static STRUCT_IF_C BFu31ll_BFu7c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 4, 7, 17, 1, "BFu31ll_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 4, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu7c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_BFu17i, BFu31ll_BFu7c_BFu17i)
//============================================================================


struct  BFu31ll_BFu7c_BFu17ll  {
  __tsu64 v1:31;
  unsigned char v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu31ll_BFu7c_BFu17ll) C1{ FL:31 Fc:7 FL:17}



static void Test_BFu31ll_BFu7c_BFu17ll()
{
  {
    init_simple_test("BFu31ll_BFu7c_BFu17ll");
    static STRUCT_IF_C BFu31ll_BFu7c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 4, 7, 17, 1, "BFu31ll_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 4, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu7c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_BFu17ll, BFu31ll_BFu7c_BFu17ll)
//============================================================================


struct  BFu31ll_BFu7c_BFu1c  {
  __tsu64 v1:31;
  unsigned char v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu31ll_BFu7c_BFu1c) C1{ FL:31 Fc:7 Fc:1}



static void Test_BFu31ll_BFu7c_BFu1c()
{
  {
    init_simple_test("BFu31ll_BFu7c_BFu1c");
    static STRUCT_IF_C BFu31ll_BFu7c_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu1c");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu31ll_BFu7c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_BFu1c, BFu31ll_BFu7c_BFu1c)
//============================================================================


struct  BFu31ll_BFu7c_BFu1i  {
  __tsu64 v1:31;
  unsigned char v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu31ll_BFu7c_BFu1i) C1{ FL:31 Fc:7 Fi:1}



static void Test_BFu31ll_BFu7c_BFu1i()
{
  {
    init_simple_test("BFu31ll_BFu7c_BFu1i");
    static STRUCT_IF_C BFu31ll_BFu7c_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu1i");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu31ll_BFu7c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_BFu1i, BFu31ll_BFu7c_BFu1i)
//============================================================================


struct  BFu31ll_BFu7c_BFu1ll  {
  __tsu64 v1:31;
  unsigned char v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu31ll_BFu7c_BFu1ll) C1{ FL:31 Fc:7 FL:1}



static void Test_BFu31ll_BFu7c_BFu1ll()
{
  {
    init_simple_test("BFu31ll_BFu7c_BFu1ll");
    static STRUCT_IF_C BFu31ll_BFu7c_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu1ll");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu31ll_BFu7c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_BFu1ll, BFu31ll_BFu7c_BFu1ll)
//============================================================================


struct  BFu31ll_BFu7c_BFu1s  {
  __tsu64 v1:31;
  unsigned char v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu31ll_BFu7c_BFu1s) C1{ FL:31 Fc:7 Fs:1}



static void Test_BFu31ll_BFu7c_BFu1s()
{
  {
    init_simple_test("BFu31ll_BFu7c_BFu1s");
    static STRUCT_IF_C BFu31ll_BFu7c_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu1s");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu31ll_BFu7c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_BFu1s, BFu31ll_BFu7c_BFu1s)
//============================================================================


struct  BFu31ll_BFu7c_BFu31i  {
  __tsu64 v1:31;
  unsigned char v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu31ll_BFu7c_BFu31i) C1{ FL:31 Fc:7 Fi:31}



static void Test_BFu31ll_BFu7c_BFu31i()
{
  {
    init_simple_test("BFu31ll_BFu7c_BFu31i");
    static STRUCT_IF_C BFu31ll_BFu7c_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu7c_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_BFu31i, BFu31ll_BFu7c_BFu31i)
//============================================================================


struct  BFu31ll_BFu7c_BFu31ll  {
  __tsu64 v1:31;
  unsigned char v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu31ll_BFu7c_BFu31ll) C1{ FL:31 Fc:7 FL:31}



static void Test_BFu31ll_BFu7c_BFu31ll()
{
  {
    init_simple_test("BFu31ll_BFu7c_BFu31ll");
    static STRUCT_IF_C BFu31ll_BFu7c_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu7c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 31, 1, "BFu31ll_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_BFu31ll, BFu31ll_BFu7c_BFu31ll)
//============================================================================


struct  BFu31ll_BFu7c_BFu32i  {
  __tsu64 v1:31;
  unsigned char v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu31ll_BFu7c_BFu32i) C1{ FL:31 Fc:7 Fi:32}



static void Test_BFu31ll_BFu7c_BFu32i()
{
  {
    init_simple_test("BFu31ll_BFu7c_BFu32i");
    static STRUCT_IF_C BFu31ll_BFu7c_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu7c_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31ll_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu7c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_BFu32i, BFu31ll_BFu7c_BFu32i)
//============================================================================


struct  BFu31ll_BFu7c_BFu32ll  {
  __tsu64 v1:31;
  unsigned char v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu31ll_BFu7c_BFu32ll) C1{ FL:31 Fc:7 FL:32}



static void Test_BFu31ll_BFu7c_BFu32ll()
{
  {
    init_simple_test("BFu31ll_BFu7c_BFu32ll");
    static STRUCT_IF_C BFu31ll_BFu7c_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu7c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 32, 1, "BFu31ll_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu31ll_BFu7c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_BFu32ll, BFu31ll_BFu7c_BFu32ll)
//============================================================================


struct  BFu31ll_BFu7c_BFu33  {
  __tsu64 v1:31;
  unsigned char v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu31ll_BFu7c_BFu33) C1{ FL:31 Fc:7 FL:33}



static void Test_BFu31ll_BFu7c_BFu33()
{
  {
    init_simple_test("BFu31ll_BFu7c_BFu33");
    static STRUCT_IF_C BFu31ll_BFu7c_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu7c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 33, 1, "BFu31ll_BFu7c_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu31ll_BFu7c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_BFu33, BFu31ll_BFu7c_BFu33)
//============================================================================


struct  BFu31ll_BFu7c_BFu7c  {
  __tsu64 v1:31;
  unsigned char v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu31ll_BFu7c_BFu7c) C1{ FL:31 Fc:7 Fc:7}



static void Test_BFu31ll_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu31ll_BFu7c_BFu7c");
    static STRUCT_IF_C BFu31ll_BFu7c_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_BFu7c, BFu31ll_BFu7c_BFu7c)
//============================================================================


struct  BFu31ll_BFu7c_BFu7i  {
  __tsu64 v1:31;
  unsigned char v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu31ll_BFu7c_BFu7i) C1{ FL:31 Fc:7 Fi:7}



static void Test_BFu31ll_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu31ll_BFu7c_BFu7i");
    static STRUCT_IF_C BFu31ll_BFu7c_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "BFu31ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_BFu7i, BFu31ll_BFu7c_BFu7i)
//============================================================================


struct  BFu31ll_BFu7c_BFu7ll  {
  __tsu64 v1:31;
  unsigned char v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu31ll_BFu7c_BFu7ll) C1{ FL:31 Fc:7 FL:7}



static void Test_BFu31ll_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu31ll_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu31ll_BFu7c_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "BFu31ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_BFu7ll, BFu31ll_BFu7c_BFu7ll)
//============================================================================


struct  BFu31ll_BFu7c_BFu7s  {
  __tsu64 v1:31;
  unsigned char v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu31ll_BFu7c_BFu7s) C1{ FL:31 Fc:7 Fs:7}



static void Test_BFu31ll_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu31ll_BFu7c_BFu7s");
    static STRUCT_IF_C BFu31ll_BFu7c_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "BFu31ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_BFu7s, BFu31ll_BFu7c_BFu7s)
//============================================================================


struct  BFu31ll_BFu7c_BFu8c  {
  __tsu64 v1:31;
  unsigned char v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu31ll_BFu7c_BFu8c) C1{ FL:31 Fc:7 Fc:8}



static void Test_BFu31ll_BFu7c_BFu8c()
{
  {
    init_simple_test("BFu31ll_BFu7c_BFu8c");
    static STRUCT_IF_C BFu31ll_BFu7c_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31ll_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu7c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_BFu8c, BFu31ll_BFu7c_BFu8c)
//============================================================================


struct  BFu31ll_BFu7c_BFu8i  {
  __tsu64 v1:31;
  unsigned char v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu31ll_BFu7c_BFu8i) C1{ FL:31 Fc:7 Fi:8}



static void Test_BFu31ll_BFu7c_BFu8i()
{
  {
    init_simple_test("BFu31ll_BFu7c_BFu8i");
    static STRUCT_IF_C BFu31ll_BFu7c_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "BFu31ll_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "BFu31ll_BFu7c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_BFu8i, BFu31ll_BFu7c_BFu8i)
//============================================================================


struct  BFu31ll_BFu7c_BFu8ll  {
  __tsu64 v1:31;
  unsigned char v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu31ll_BFu7c_BFu8ll) C1{ FL:31 Fc:7 FL:8}



static void Test_BFu31ll_BFu7c_BFu8ll()
{
  {
    init_simple_test("BFu31ll_BFu7c_BFu8ll");
    static STRUCT_IF_C BFu31ll_BFu7c_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "BFu31ll_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "BFu31ll_BFu7c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_BFu8ll, BFu31ll_BFu7c_BFu8ll)
//============================================================================


struct  BFu31ll_BFu7c_BFu8s  {
  __tsu64 v1:31;
  unsigned char v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu31ll_BFu7c_BFu8s) C1{ FL:31 Fc:7 Fs:8}



static void Test_BFu31ll_BFu7c_BFu8s()
{
  {
    init_simple_test("BFu31ll_BFu7c_BFu8s");
    static STRUCT_IF_C BFu31ll_BFu7c_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "BFu31ll_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "BFu31ll_BFu7c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_BFu8s, BFu31ll_BFu7c_BFu8s)
//============================================================================


struct  BFu31ll_BFu7c_BFu9i  {
  __tsu64 v1:31;
  unsigned char v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu31ll_BFu7c_BFu9i) C1{ FL:31 Fc:7 Fi:9}



static void Test_BFu31ll_BFu7c_BFu9i()
{
  {
    init_simple_test("BFu31ll_BFu7c_BFu9i");
    static STRUCT_IF_C BFu31ll_BFu7c_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "BFu31ll_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "BFu31ll_BFu7c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_BFu9i, BFu31ll_BFu7c_BFu9i)
//============================================================================


struct  BFu31ll_BFu7c_BFu9ll  {
  __tsu64 v1:31;
  unsigned char v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu31ll_BFu7c_BFu9ll) C1{ FL:31 Fc:7 FL:9}



static void Test_BFu31ll_BFu7c_BFu9ll()
{
  {
    init_simple_test("BFu31ll_BFu7c_BFu9ll");
    static STRUCT_IF_C BFu31ll_BFu7c_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "BFu31ll_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "BFu31ll_BFu7c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_BFu9ll, BFu31ll_BFu7c_BFu9ll)
//============================================================================


struct  BFu31ll_BFu7c_BFu9s  {
  __tsu64 v1:31;
  unsigned char v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu31ll_BFu7c_BFu9s) C1{ FL:31 Fc:7 Fs:9}



static void Test_BFu31ll_BFu7c_BFu9s()
{
  {
    init_simple_test("BFu31ll_BFu7c_BFu9s");
    static STRUCT_IF_C BFu31ll_BFu7c_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "BFu31ll_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "BFu31ll_BFu7c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_BFu9s, BFu31ll_BFu7c_BFu9s)
//============================================================================


struct  BFu31ll_BFu7c_C  {
  __tsu64 v1:31;
  unsigned char v2:7;
  char v3;
};
//SIG(1 BFu31ll_BFu7c_C) C1{ FL:31 Fc:7 Fc}



static void Test_BFu31ll_BFu7c_C()
{
  {
    init_simple_test("BFu31ll_BFu7c_C");
    static STRUCT_IF_C BFu31ll_BFu7c_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_C");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_C");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_C");
    check_field_offset(lv, v3, 5, "BFu31ll_BFu7c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_C, BFu31ll_BFu7c_C)
//============================================================================


struct  BFu31ll_BFu7c_D  {
  __tsu64 v1:31;
  unsigned char v2:7;
  double v3;
};
//SIG(1 BFu31ll_BFu7c_D) C1{ FL:31 Fc:7 FL}



static void Test_BFu31ll_BFu7c_D()
{
  {
    init_simple_test("BFu31ll_BFu7c_D");
    static STRUCT_IF_C BFu31ll_BFu7c_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu7c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_D");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_D");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_D");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu7c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_D, BFu31ll_BFu7c_D)
//============================================================================


struct  BFu31ll_BFu7c_F  {
  __tsu64 v1:31;
  unsigned char v2:7;
  float v3;
};
//SIG(1 BFu31ll_BFu7c_F) C1{ FL:31 Fc:7 Fi}



static void Test_BFu31ll_BFu7c_F()
{
  {
    init_simple_test("BFu31ll_BFu7c_F");
    static STRUCT_IF_C BFu31ll_BFu7c_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu7c_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_F");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_F");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_F");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu7c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_F, BFu31ll_BFu7c_F)
//============================================================================


struct  BFu31ll_BFu7c_I  {
  __tsu64 v1:31;
  unsigned char v2:7;
  int v3;
};
//SIG(1 BFu31ll_BFu7c_I) C1{ FL:31 Fc:7 Fi}



static void Test_BFu31ll_BFu7c_I()
{
  {
    init_simple_test("BFu31ll_BFu7c_I");
    static STRUCT_IF_C BFu31ll_BFu7c_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu7c_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_I");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_I");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_I");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu7c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_I, BFu31ll_BFu7c_I)
//============================================================================


struct  BFu31ll_BFu7c_Ip  {
  __tsu64 v1:31;
  unsigned char v2:7;
  int *v3;
};
//SIG(1 BFu31ll_BFu7c_Ip) C1{ FL:31 Fc:7 Fp}



static void Test_BFu31ll_BFu7c_Ip()
{
  {
    init_simple_test("BFu31ll_BFu7c_Ip");
    static STRUCT_IF_C BFu31ll_BFu7c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu7c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_Ip");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_Ip");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_Ip");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu7c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_Ip, BFu31ll_BFu7c_Ip)
//============================================================================


struct  BFu31ll_BFu7c_L  {
  __tsu64 v1:31;
  unsigned char v2:7;
  __tsi64 v3;
};
//SIG(1 BFu31ll_BFu7c_L) C1{ FL:31 Fc:7 FL}



static void Test_BFu31ll_BFu7c_L()
{
  {
    init_simple_test("BFu31ll_BFu7c_L");
    static STRUCT_IF_C BFu31ll_BFu7c_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu7c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_L");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_L");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_L");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu7c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_L, BFu31ll_BFu7c_L)
//============================================================================


struct  BFu31ll_BFu7c_S  {
  __tsu64 v1:31;
  unsigned char v2:7;
  short v3;
};
//SIG(1 BFu31ll_BFu7c_S) C1{ FL:31 Fc:7 Fs}



static void Test_BFu31ll_BFu7c_S()
{
  {
    init_simple_test("BFu31ll_BFu7c_S");
    static STRUCT_IF_C BFu31ll_BFu7c_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_S");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_S");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_S");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu7c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_S, BFu31ll_BFu7c_S)
//============================================================================


struct  BFu31ll_BFu7c_Uc  {
  __tsu64 v1:31;
  unsigned char v2:7;
  unsigned char v3;
};
//SIG(1 BFu31ll_BFu7c_Uc) C1{ FL:31 Fc:7 Fc}



static void Test_BFu31ll_BFu7c_Uc()
{
  {
    init_simple_test("BFu31ll_BFu7c_Uc");
    static STRUCT_IF_C BFu31ll_BFu7c_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_Uc");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_Uc");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_Uc");
    check_field_offset(lv, v3, 5, "BFu31ll_BFu7c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_Uc, BFu31ll_BFu7c_Uc)
//============================================================================


struct  BFu31ll_BFu7c_Ui  {
  __tsu64 v1:31;
  unsigned char v2:7;
  unsigned int v3;
};
//SIG(1 BFu31ll_BFu7c_Ui) C1{ FL:31 Fc:7 Fi}



static void Test_BFu31ll_BFu7c_Ui()
{
  {
    init_simple_test("BFu31ll_BFu7c_Ui");
    static STRUCT_IF_C BFu31ll_BFu7c_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu7c_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_Ui");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_Ui");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_Ui");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu7c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_Ui, BFu31ll_BFu7c_Ui)
//============================================================================


struct  BFu31ll_BFu7c_Ul  {
  __tsu64 v1:31;
  unsigned char v2:7;
  __tsu64 v3;
};
//SIG(1 BFu31ll_BFu7c_Ul) C1{ FL:31 Fc:7 FL}



static void Test_BFu31ll_BFu7c_Ul()
{
  {
    init_simple_test("BFu31ll_BFu7c_Ul");
    static STRUCT_IF_C BFu31ll_BFu7c_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_BFu7c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_Ul");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_Ul");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_Ul");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu7c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_Ul, BFu31ll_BFu7c_Ul)
//============================================================================


struct  BFu31ll_BFu7c_Us  {
  __tsu64 v1:31;
  unsigned char v2:7;
  unsigned short v3;
};
//SIG(1 BFu31ll_BFu7c_Us) C1{ FL:31 Fc:7 Fs}



static void Test_BFu31ll_BFu7c_Us()
{
  {
    init_simple_test("BFu31ll_BFu7c_Us");
    static STRUCT_IF_C BFu31ll_BFu7c_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_Us");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_Us");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_Us");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu7c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_Us, BFu31ll_BFu7c_Us)
//============================================================================


struct  BFu31ll_BFu7c_Vp  {
  __tsu64 v1:31;
  unsigned char v2:7;
  void *v3;
};
//SIG(1 BFu31ll_BFu7c_Vp) C1{ FL:31 Fc:7 Fp}



static void Test_BFu31ll_BFu7c_Vp()
{
  {
    init_simple_test("BFu31ll_BFu7c_Vp");
    static STRUCT_IF_C BFu31ll_BFu7c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu7c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_Vp");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_Vp");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_Vp");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu7c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7c_Vp, BFu31ll_BFu7c_Vp)
//============================================================================


struct  BFu31ll_BFu7i  {
  __tsu64 v1:31;
  unsigned int v2:7;
};
//SIG(1 BFu31ll_BFu7i) C1{ FL:31 Fi:7}



static void Test_BFu31ll_BFu7i()
{
  {
    init_simple_test("BFu31ll_BFu7i");
    static STRUCT_IF_C BFu31ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7i, BFu31ll_BFu7i)
//============================================================================


struct  BFu31ll_BFu7i_BFu15i  {
  __tsu64 v1:31;
  unsigned int v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu31ll_BFu7i_BFu15i) C1{ FL:31 Fi:7 Fi:15}



static void Test_BFu31ll_BFu7i_BFu15i()
{
  {
    init_simple_test("BFu31ll_BFu7i_BFu15i");
    static STRUCT_IF_C BFu31ll_BFu7i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 4, 7, 15, 1, "BFu31ll_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 4, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu7i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7i_BFu15i, BFu31ll_BFu7i_BFu15i)
//============================================================================


struct  BFu31ll_BFu7i_BFu15ll  {
  __tsu64 v1:31;
  unsigned int v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu31ll_BFu7i_BFu15ll) C1{ FL:31 Fi:7 FL:15}



static void Test_BFu31ll_BFu7i_BFu15ll()
{
  {
    init_simple_test("BFu31ll_BFu7i_BFu15ll");
    static STRUCT_IF_C BFu31ll_BFu7i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 7, 15, 1, "BFu31ll_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu7i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7i_BFu15ll, BFu31ll_BFu7i_BFu15ll)
//============================================================================


struct  BFu31ll_BFu7i_BFu15s  {
  __tsu64 v1:31;
  unsigned int v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu31ll_BFu7i_BFu15s) C1{ FL:31 Fi:7 Fs:15}



static void Test_BFu31ll_BFu7i_BFu15s()
{
  {
    init_simple_test("BFu31ll_BFu7i_BFu15s");
    static STRUCT_IF_C BFu31ll_BFu7i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31ll_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu7i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7i_BFu15s, BFu31ll_BFu7i_BFu15s)
//============================================================================


struct  BFu31ll_BFu7i_BFu16i  {
  __tsu64 v1:31;
  unsigned int v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu31ll_BFu7i_BFu16i) C1{ FL:31 Fi:7 Fi:16}



static void Test_BFu31ll_BFu7i_BFu16i()
{
  {
    init_simple_test("BFu31ll_BFu7i_BFu16i");
    static STRUCT_IF_C BFu31ll_BFu7i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 4, 7, 16, 1, "BFu31ll_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 4, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu7i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7i_BFu16i, BFu31ll_BFu7i_BFu16i)
//============================================================================


struct  BFu31ll_BFu7i_BFu16ll  {
  __tsu64 v1:31;
  unsigned int v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu31ll_BFu7i_BFu16ll) C1{ FL:31 Fi:7 FL:16}



static void Test_BFu31ll_BFu7i_BFu16ll()
{
  {
    init_simple_test("BFu31ll_BFu7i_BFu16ll");
    static STRUCT_IF_C BFu31ll_BFu7i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 7, 16, 1, "BFu31ll_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu7i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7i_BFu16ll, BFu31ll_BFu7i_BFu16ll)
//============================================================================


struct  BFu31ll_BFu7i_BFu16s  {
  __tsu64 v1:31;
  unsigned int v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu31ll_BFu7i_BFu16s) C1{ FL:31 Fi:7 Fs:16}



static void Test_BFu31ll_BFu7i_BFu16s()
{
  {
    init_simple_test("BFu31ll_BFu7i_BFu16s");
    static STRUCT_IF_C BFu31ll_BFu7i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31ll_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu7i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7i_BFu16s, BFu31ll_BFu7i_BFu16s)
//============================================================================


struct  BFu31ll_BFu7i_BFu17i  {
  __tsu64 v1:31;
  unsigned int v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu31ll_BFu7i_BFu17i) C1{ FL:31 Fi:7 Fi:17}



static void Test_BFu31ll_BFu7i_BFu17i()
{
  {
    init_simple_test("BFu31ll_BFu7i_BFu17i");
    static STRUCT_IF_C BFu31ll_BFu7i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 4, 7, 17, 1, "BFu31ll_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 4, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu7i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu31ll_BFu7i_BFu17i, BFu31ll_BFu7i_BFu17i)
//============================================================================

